xorg-server (2:1.12.0-1) direct (non packaging) changes

Summary

 config/dbus-api                  |   40 ++
 doc/c-extensions                 |   61 +++
 fix-miregion                     |   29 +
 fix-miregion-private             |   14 
 fix-patch-whitespace             |    4 
 fix-region                       |   38 ++
 hw/kdrive/Xkdrive.man            |   57 +++
 hw/kdrive/ephyr/ephyrhostproxy.c |   94 +++++
 hw/kdrive/ephyr/ephyrhostproxy.h |   51 ++
 hw/kdrive/ephyr/ephyrproxyext.c  |  119 ++++++
 hw/kdrive/ephyr/ephyrproxyext.h  |   34 +
 hw/kdrive/fbdev/Xfbdev.man       |   28 +
 hw/xquartz/GL/glcontextmodes.c   |  550 +++++++++++++++++++++++++++++++
 hw/xquartz/GL/glcontextmodes.h   |   54 +++
 hw/xwin/glx/wgl_ext_api.h        |   87 ++++
 hw/xwin/winglobals.h             |   88 +++++
 hw/xwin/winmonitors.h            |   14 
 mi/mibstore.c                    |   43 ++
 test/ddxstubs.c                  |   91 +++++
 xkb/XKM_file_format.txt          |  684 +++++++++++++++++++++++++++++++++++++++
 20 files changed, 2180 insertions(+)

    
download this patch

Patch contents

--- xorg-server-1.12.0.orig/fix-patch-whitespace
+++ xorg-server-1.12.0/fix-patch-whitespace
@@ -0,0 +1,4 @@
+#!/bin/sh
+git diff --check |
+sed -n 's!^\([^:]*\):\([^:]*\):.*!sed -i "\2 s/[ \t]*$//; \2 s/ *\t/\t/g" \1!p' |
+sh
--- xorg-server-1.12.0.orig/fix-miregion-private
+++ xorg-server-1.12.0/fix-miregion-private
@@ -0,0 +1,14 @@
+#!/bin/sh
+sed -i \
+-e 's/miEmptyBox\b/RegionEmptyBox/g' \
+-e 's/miEmptyData\b/RegionEmptyData/g' \
+-e 's/miBrokenData\b/RegionBrokenData/g' \
+-e 's/miBrokenRegion\b/RegionBrokenRegion/g' \
+-e 's/miCoalesce\b/RegionCoalesce/g' \
+-e 's/miAppendNonO\b/RegionAppendNonO/g' \
+-e 's/miRegionOp\b/RegionOp/g' \
+-e 's/miSetExtents\b/RegionSetExtents/g' \
+-e 's/miIntersectO\b/RegionIntersectO/g' \
+-e 's/miUnionO\b/RegionUnionO/g' \
+-e 's/miSubtractO\b/RegionSubtractO/g' \
+"$@"
--- xorg-server-1.12.0.orig/fix-region
+++ xorg-server-1.12.0/fix-region
@@ -0,0 +1,38 @@
+#!/bin/sh
+sed -i \
+    -e 's/REGION_NIL\b/RegionNil/g' \
+    -e 's/REGION_NAR\b/RegionNar/g' \
+    -e 's/REGION_NUM_RECTS\b/RegionNumRects/g' \
+    -e 's/REGION_SIZE\b/RegionSize/g' \
+    -e 's/REGION_RECTS\b/RegionRects/g' \
+    -e 's/REGION_BOXPTR\b/RegionBoxptr/g' \
+    -e 's/REGION_BOX\b/RegionBox/g' \
+    -e 's/REGION_TOP\b/RegionTop/g' \
+    -e 's/REGION_END\b/RegionEnd/g' \
+    -e 's/REGION_SZOF\b/RegionSizeof/g' \
+    -e 's/REGION_CREATE *([^,]*, */RegionCreate(/g' \
+    -e 's/REGION_COPY *([^,]*, */RegionCopy(/g' \
+    -e 's/REGION_DESTROY *([^,]*, */RegionDestroy(/g' \
+    -e 's/REGION_INTERSECT *([^,]*, */RegionIntersect(/g' \
+    -e 's/REGION_UNION *([^,]*, */RegionUnion(/g' \
+    -e 's/REGION_SUBTRACT *([^,]*, */RegionSubtract(/g' \
+    -e 's/REGION_INVERSE *([^,]*, */RegionInverse(/g' \
+    -e 's/REGION_TRANSLATE *([^,]*, */RegionTranslate(/g' \
+    -e 's/RECT_IN_REGION *([^,]*, */RegionContainsRect(/g' \
+    -e 's/POINT_IN_REGION *([^,]*, */RegionContainsPoint(/g' \
+    -e 's/REGION_EQUAL *([^,]*, */RegionEqual(/g' \
+    -e 's/REGION_APPEND *([^,]*, */RegionAppend(/g' \
+    -e 's/REGION_VALIDATE *([^,]*, */RegionValidate(/g' \
+    -e 's/BITMAP_TO_REGION\b/BitmapToRegion/g' \
+    -e 's/RECTS_TO_REGION *([^,]*, */RegionFromRects(/g' \
+    -e 's/REGION_BREAK *([^,]*, */RegionBreak(/g' \
+    -e 's/REGION_INIT *([^,]*, */RegionInit(/g' \
+    -e 's/REGION_UNINIT *([^,]*, */RegionUninit(/g' \
+    -e 's/REGION_RESET *([^,]*, */RegionReset(/g' \
+    -e 's/REGION_NOTEMPTY *([^,]*, */RegionNotEmpty(/g' \
+    -e 's/REGION_BROKEN *([^,]*, */RegionBroken(/g' \
+    -e 's/REGION_EMPTY *([^,]*, */RegionEmpty(/g' \
+    -e 's/REGION_EXTENTS *([^,]*, */RegionExtents(/g' \
+    -e 's/REGION_NULL *([^,]*, */RegionNull(/g' \
+    -e 's/REGION_NULL$/RegionNull/g' \
+    "$@"
--- xorg-server-1.12.0.orig/fix-miregion
+++ xorg-server-1.12.0/fix-miregion
@@ -0,0 +1,29 @@
+#!/bin/sh
+sed -i \
+-e 's/miRegionCreate\b/RegionCreate/g' \
+-e 's/miRegionInit\b/RegionInit/g' \
+-e 's/miRegionDestroy\b/RegionDestroy/g' \
+-e 's/miRegionUninit\b/RegionUninit/g' \
+-e 's/miRegionCopy\b/RegionCopy/g' \
+-e 's/miIntersect\b/RegionIntersect/g' \
+-e 's/miUnion\b/RegionUnion/g' \
+-e 's/miRegionAppend\b/RegionAppend/g' \
+-e 's/miRegionValidate\b/RegionValidate/g' \
+-e 's/miRectsToRegion\b/RegionFromRects/g' \
+-e 's/miSubtract\b/RegionSubtract/g' \
+-e 's/miInverse\b/RegionInverse/g' \
+-e 's/miRectIn\b/RegionContainsRect/g' \
+-e 's/miTranslateRegion\b/RegionTranslate/g' \
+-e 's/miRegionReset\b/RegionReset/g' \
+-e 's/miRegionBreak\b/RegionBreak/g' \
+-e 's/miPointInRegion\b/RegionContainsPoint/g' \
+-e 's/miRegionEqual\b/RegionEqual/g' \
+-e 's/miRegionNotEmpty\b/RegionNotEmpty/g' \
+-e 's/miRegionEmpty\b/RegionEmpty/g' \
+-e 's/miRegionExtents\b/RegionExtents/g' \
+-e 's/miPrintRegion\b/RegionPrint/g' \
+-e 's/miRectAlloc\b/RegionRectAlloc/g' \
+-e 's/miValidRegion\b/RegionIsValid/g' \
+-e 's/miRegionBroken\b/RegionBroken/g' \
+-e 's/miClipSpans\b/RegionClipSpans/g' \
+"$@"
--- xorg-server-1.12.0.orig/doc/c-extensions
+++ xorg-server-1.12.0/doc/c-extensions
@@ -0,0 +1,61 @@
+First of all: C89 or better.  If you don't have that, port gcc first.
+
+Use of C language extensions throughout the X server tree
+---------------------------------------------------------
+
+Optional extensions:
+The server will still build if your toolchain does not support these
+extensions, although the results may not be optimal.
+
+    * _X_SENTINEL(x): member x of the passed structure must be NULL, e.g.:
+                      void parseOptions(Option *options _X_SENTINEL(0));
+                      parseOptions("foo", "bar", NULL); /* this is OK */
+                      parseOptions("foo", "bar", "baz"); /* this is not */
+                      This definition comes from Xfuncproto.h in the core
+                      protocol headers.
+    * _X_ATTRIBUTE_PRINTF(x, y): This function has printf-like semantics;
+                                 check the format string when built with
+                                 -Wformat (gcc) or similar.
+    * _X_EXPORT: this function should appear in symbol tables.
+    * _X_HIDDEN: this function should not appear in the _dynamic_ symbol
+                 table.
+    * _X_INTERNAL: like _X_HIDDEN, but attempt to ensure that this function
+                   is never called from another module.
+    * _X_INLINE: inline this functon if possible (generally obeyed unless
+                 disabling optimisations).
+    * _X_DEPRECATED: warn on use of this function.
+
+Mandatory extensions:
+The server will not build if your toolchain does not support these extensions.
+
+    * named initialisers: explicitly initialising structure members, e.g.:
+                          struct foo bar = { .baz = quux, .brian = "dog" };
+    * variadic macros: macros with a variable number of arguments, e.g.:
+                       #define DebugF(x, ...) /**/
+    * interleaved code and declarations: { foo = TRUE; int bar; do_stuff(); }
+
+
+Use of OS and library facilities throughout the X server tree
+-------------------------------------------------------------
+
+Non-OS-dependent code can assume facilities at least as good as
+the non-OS-facility parts of POSIX-1.2001.  Ideally this would
+be C99, but even gcc+glibc doesn't implement that yet.
+
+Unix-like systems are assumed to be at least as good as UNIX03.
+
+Linux systems must be at least 2.4 or later.  As a practical matter
+though, 2.4 kernels never receive any testing.  Use 2.6 already.
+
+TODO: Solaris.
+
+TODO: *BSD.
+
+Code that needs to be portable to Windows should be careful to,
+well, be portable.  Note that there are two Windows ports, cygwin and
+mingw.  Cygwin is more or less like Linux, but mingw is a bit more
+restrictive.  TODO: document which versions of Windows we actually care
+about.
+
+OSX support is generally limited to the most recent version.  Currently
+that means 10.5.
--- xorg-server-1.12.0.orig/xkb/XKM_file_format.txt
+++ xorg-server-1.12.0/xkb/XKM_file_format.txt
@@ -0,0 +1,684 @@
+                        XKM File Format Description
+                                Version 15
+
+1. Introduction
+
+The XKM file format is the exchange format for XKB keyboard descriptions
+between the server and xkbcomp. Usually, the server forks off xkbcomp,
+xkbcomp compiles the XKM format from the given parameters.
+The resulting XKM file is put into a directory readable by the server and
+then parsed.
+
+The XKM format is little more than a binary dump of various XKB-specific
+structures and hence tied to the ABI of the server.
+
+                              ❧❧❧❧❧❧❧❧❧❧❧
+
+1.1 About this file format description
+
+This description was produced by analyzing the XKM parsing code. Parts of
+the file description present in the original format specification may be
+missing. This description thus cannot be a reference document for XKM
+implementations.
+
+No description of the meaning of the various fields is given here. Refer to
+the XKB protocol specification for more details.
+                              ❧❧❧❧❧❧❧❧❧❧❧
+
+2. Notations used in this document
+
+Notation for structures:
+
+┌───
+  Name of struct
+	name of field:		type or fixed value of field
+	name of field:		type or fixed value of field
+└───
+
+Data types are identical to those used in the X Protocol specification
+except where noted otherwise. Structs specific to XKM are prefixed with XKM,
+defines specific to the XKB protocol specification are prefixed with Xkb and
+their value is equivalent to that in the protocol specification.
+
+Multiple instances of a given type are denoted in the following form:
+	name of field:		LISTofFIELDTYPE
+
+Length specifiers for such fields are usually prefixed with num_. For
+example, a struct containing a num_foo of 8 and a 'foo' field contains 8
+structures of type 'foo'.
+
+Variable length padding is specified as pad(x), where x is the length of the
+data to be padded out to a multiple of 4 bytes. For example, given an x of
+10, pad(x) would be the remaining 2 bytes to pad the whole struct to 12
+bytes.
+
+A special notation is a variable content struct. In this case, the contents
+of the struct depend on the value of one or more specific fields.
+┌───
+  Name of struct
+	field:			type or fixed value of field
+	field:			type or fixed value of field
+	───
+	field ⇒ value 1
+	⇒
+		specific field:		type
+		specific field:		type
+	───
+        field ⇒ value 2
+	⇒
+		specific field:		type
+		specific field:		type
+└───
+This notation denotes that if field is of value 1, this struct contains the
+specific fields listed underneath value 1.
+
+                              ❧❧❧❧❧❧❧❧❧❧❧
+
+3. XKM Format
+
+The XKM format is a binary format with structs usually being padded to a
+multiple of 4 bytes. No provisions for endianess are provided, the parser is
+left to guess the endianess of the XKM file.
+
+                              ❧❧❧❧❧❧❧❧❧❧❧
+3.1 Common data types
+
+┌───
+  XKMCountedString
+	count:			CARD16
+	string:			count * CHAR
+	pad:			pad(count + 2)
+└───
+
+XKMCountedString is used for user-readable identifiers. Prime example are
+the level names and the section names ("complete", "evdev(inet)", etc.)
+
+┌───
+  XKMGroupBits:		CARD8
+	group1			0x1
+	group2			0x2
+	group3			0x4
+	group4			0x8
+└───
+
+                              ❧❧❧❧❧❧❧❧❧❧❧
+
+3.2 Header and Table of Contents
+
+┌───
+  XKMHeader
+	version:		CARD8
+	identifier1:		'm'
+	identifier2:		'k'
+	idenfifier3:		'x'
+└───
+
+The XKM file format has a 4 byte header identifying the file and the XKM
+version. The header is followed by the table of contents indicating the
+sections present in this file.
+
+┌───
+  XKMFileInfo
+	type:			CARD8
+	min_keycode:		CARD8
+	max_keycode:		CARD8
+	num_sectioninfo:	CARD8
+	present:		CARD16
+	pad:			CARD16
+	sectioninfo:		LISTofXKMSectionInfo
+└───
+
+min_keycode and max_keycode specify the keycode range for this keyboard
+descriptions. The core protocol requires min_keycode always be equal to or
+greater than 8.
+
+┌───
+  XKMSectionInfo
+	type:			CARD16
+		XkmTypesIndex		0
+		XkmCompatMapIndex	1
+		XkmSymbolsIndex		2
+		XkmIndicatorsIndex	3
+		XkmKeyNamesIndex	4
+		XkmGeometryIndex	5
+		XkmVirtualModsIndex	6
+	format:			CARD16
+	size:			CARD16
+	offset:			CARD16
+└───
+
+Describes the section found in a chunk of a file. This struct is found
+_twice_ in the file per section, once as part of the XKMFileInfo, once at
+the beginning of the actual section (see offset).
+The type specifies the type of the section, the section is to be parsed
+according to this type.
+Size and offset specify the size in bytes and the offset into the file in
+bytes, respectively.
+
+3.3 Sections
+
+Each section resides at the offset specified in the XKMFileInfo sectioninfo.
+
+                              ❧❧❧❧❧❧❧❧❧❧❧
+
+3.3.1 XKMTypes
+
+An XKMTypes section describes the key types defined in a layout. Roughly
+speaking, a key type defines how many levels a given key has and which
+modifiers change to a particular level.
+
+┌───
+  XKMTypesSection
+	section_info:		XKMSectionInfo
+	name:			XKMCountedString
+	num_types:		CARD16
+	pad:			CARD16
+	types:			LISTofXKMKeyType
+└───
+
+┌───
+  XKMKeyType
+	real_mods:		CARD8
+	num_levels:		CARD8
+	virt_mods:		CARD16
+	num_map_entries: 	CARD8
+	num_level_names: 	CARD8
+	perserve:	 	CARD8
+	pad:			CARD8
+	map_entries:		LISTofXKMKTMapEntry
+	name:			XKMCountedString
+	mods:			LISTofXKMModsDesc
+	level_names:		LISXTofXKMCountedString
+└───
+
+The num_map_entries specifies the number of structs in both map_entries and mods. mods is only present if preserve is TRUE.
+
+┌───
+  XKMKTMapEntry
+	level:			CARD8
+	real_mods:		CARD8
+	virt_mods:		CARD16
+└───
+
+┌───
+  XKMModsDesc
+	real_mods:		CARD8
+	pad:			CARD8
+	virt_mods:		CARD16
+└───
+
+                              ❧❧❧❧❧❧❧❧❧❧❧
+3.3.2 XKMCompatMap
+
+An XKMCompatMap section describes the actions a keyboard may trigger. This
+ranges from the TerminateServer action to simple modifier bits.
+
+┌───
+  XKMCompatMap
+	section_info:		XKMSectionInfo
+	name:			XKMCountedString
+	num_si:			CARD16
+	group_mask:		XKMGroupBits
+	pad:			CARD8
+	si:			LISTofXKMSymInterpreterDesc
+	groups:			LISTofXKMModsDesc
+└───
+
+One XKMModsDesc is present for each bit set in group_mask.
+
+┌───
+  XKMSymInterpretDesc
+	sym:			CARD32
+	mods:			CARD8
+	match:			CARD8
+	virtual_mod:		CARD8
+	flags:			CARD8
+	action_type:		CARD8
+	action_data:		XKMActionData
+└───
+
+Where the action is 7 bytes of CARD8 whose content is determined by
+action_type.
+
+┌───
+  XKMActionData:
+	pad0:			CARD8
+	pad1:			CARD16
+	pad2:			CARD32
+	───
+        action_type ⇒ XkbSA_SetMods ||
+        action_type ⇒ XkbSA_LatchMods ||
+        action_type ⇒ XkbSA_LockMods
+	⇒
+		flags:			CARD8
+		mask:			CARD8
+		real_mods:		CARD8
+		vmods1:			CARD8
+		vmods2:			CARD8
+		pad:			CARD16
+	───
+        action_type ⇒ XkbSA_SetGroup ||
+        action_type ⇒ XkbSA_LatchGroup ||
+        action_type ⇒ XkbSA_LockGroup
+	⇒
+		flags:			CARD8
+		group_XXX:		CARD8
+		pad0:			CARD8
+		pad1:			CARD32
+	───
+        action_type ⇒ XkbSA_MovePtr
+	⇒
+		flags:			CARD8
+		high_XXX:		CARD8
+		low_XXX:		CARD8
+		high_YYY:		CARD8
+		low_YYY:		CARD8
+		pad:			CARD16
+	───
+        action_type ⇒ XkbSA_PtrBtn ||
+        action_type ⇒ XkbSA_LockPtrBtn
+	⇒
+		flags:			CARD8
+		count:			CARD8
+		button:			CARD8
+		pad:			CARD32
+	───
+        action_type ⇒ XkbSA_DeviceBtn ||
+        action_type ⇒ XkbSA_LockLockPtrBtn
+	⇒
+		flags:			CARD8
+		count:			CARD8
+		button:			CARD8
+		device:			CARD8
+		pad0:			CARD8
+		pad1:			CARD16
+	───
+        action_type ⇒ XkbSA_SetPtrDflt
+	⇒
+		flags:			CARD8
+		affect:			CARD8
+		valueXXX:		CARD8
+		pad0:			CARD32
+	───
+        action_type ⇒ XkbSA_ISOLock
+	⇒
+		flags:			CARD8
+		mask:			CARD8
+		real_mods:		CARD8
+		group_XXX:		CARD8
+		affect:			CARD8
+		vmods1:			CARD8
+		vmods1:			CARD8
+	───
+        action_type ⇒ XkbSA_SwitchScreen
+	⇒
+		flags:			CARD8
+		screenXXX:		CARD8
+		pad0:			CARD8
+		pad1:			CARD32
+	───
+        action_type ⇒ XkbSA_SetControls ||
+        action_type ⇒ XkbSA_LockControls
+	⇒
+		flags:			CARD8
+		ctrls3:			CARD8
+		ctrls2:			CARD8
+		ctrls1:			CARD8
+		ctrls0:			CARD8
+		pad:			CARD16
+	───
+        action_type ⇒ XkbSA_RedirectKey
+	⇒
+		new_key:		CARD8
+		mods_mask:		CARD8
+		mods:			CARD8
+		vmods_mask0:		CARD8
+		vmods_mask1:		CARD8
+		vmods0:			CARD8
+		vmods1:			CARD8
+	───
+        action_type ⇒ XkbSA_DeviceValuator
+	⇒
+		device:		CARD8
+		v1_what:		CARD8
+		v1_idx:			CARD8
+		v1_value:		CARD8
+		v2_what:		CARD8
+		v2_idx:			CARD8
+		v2_value:		CARD8
+		pad:			CARD8
+	───
+        action_type ⇒ XkbSA_XFree86Private ||
+        action_type ⇒ XkbSA_Terminate
+	⇒
+		pad0:			CARD8
+		pad1:			CARD16
+		pad2:			CARD32
+	───
+        action_type ⇒ XkbSA_ActionMessage
+	⇒
+		press_msg:		BOOL
+		release_msg:		BOOL
+		gen_event:		BOOL
+		message:		4 * CHAR
+└───
+
+Note: XkbSA_ActionMessage is currently unsupported and the contents are
+ignored.
+
+                              ❧❧❧❧❧❧❧❧❧❧❧
+3.3.3 XkmSymbols
+
+The symbols in a keymap define the actual keysyms each key may produce.
+
+┌───
+  XKMSymbols
+	section_info:		XKMSectionInfo
+	name:			XKMCountedString
+	min_keycode:		CARD8
+	max_keycode:		CARD8
+	group_names_mask:	XKMGroupBits
+	num_vmod_maps:		CARD8
+	group_names:		LISTofXKMCountedString
+	keysyms:		XKMKeysymMapDesc
+	vmod_maps:		XKMVModMapDesc
+└───
+One group_name is present for each bit set in group_names_mask.
+The number of keysyms present is max_keycode - min_keycode + 1.
+
+┌───
+  XKMKeysymMapDesc
+	width:			CARD8
+	num_groups:		CARD8
+	modifier_map:		CARD8
+	flags:			CARD8
+	names:			LISTofXKMCountedString
+	syms:			LISTofCARD32
+	behavior:		XKMBehaviorDesc
+└───
+
+Presence of names is conditional on the XkmKeyHasTypes flag. The number of
+strings is equal to the number of group bits in group_names_mask in the
+preceeding XKMSymbols section.
+The number of elements in syms is equal to width * num_groups.
+Presence of behavior is conditional on the XkmKeyHasBehavior flag.
+
+┌───
+  XKMKeyBehaviorDesc
+	type:			CARD8
+	data:			CARD8
+	pad:			CARD16
+└───
+
+┌───
+  XKMVModMapDesc
+	key:			CARD8
+	pad:			CARD8
+	vmods:			CARD16
+└───
+
+                              ❧❧❧❧❧❧❧❧❧❧❧
+
+3.3.4 XKMIndicators
+
+┌───
+  XKMIndicators
+	section_info:		XKMSectionInfo
+	name:			XKMCountedString
+	num_indicators:		CARD8
+	pad0:			CARD8
+	pad1:			CARD16
+	indicators:		LISTofXKMIndicatorMapDesc
+└───
+
+┌───
+  XKMIndicatorMapDesc
+	name:			XKMCountedString
+	indicator:		CARD8
+	flags:			CARD8
+	which_mods:		CARD8
+	real_mods:		CARD8
+	vmods:			CARD16
+	which_groups:		CARD8
+	groups:			CARD8
+	ctrls:			CARD32
+└───
+                              ❧❧❧❧❧❧❧❧❧❧❧
+
+3.3.5 XKMKeyNames
+
+┌───
+  XKMKeyNames
+	section_info:		XKMSectionInfo
+	name:			XKMCountedString
+	min_keycode:		CARD8
+	max_keycode:		CARD8
+	num_aliases:		CARD8
+	pad:			CARD8
+	keynames:		LISTofXKMKeyname
+	aliases:		LISTofXKMKeyAlias
+└───
+
+keynames contains max_keycode - min_keycode + 1 entries.
+
+┌───
+  XkmKeyname
+	name:			4 * CHAR8
+└───
+
+┌───
+  XkmKeyAlias
+	real:			XkmKeyname
+	alias:			XkmKeyname
+└───
+
+                              ❧❧❧❧❧❧❧❧❧❧❧
+
+3.3.5 XKMGeometry
+
+┌───
+  XKMGeometry
+	section_info:		XKMSectionInfo
+	name:			XKMCountedString
+	width_mm:		CARD16
+	height_mm:		CARD16
+	base_color_ndx:		CARD8
+	label_color_ndx:	CARD8
+	num_properties:		CARD16
+	num_colors:		CARD16
+	num_shapes:		CARD16
+	num_sections:		CARD16
+	num_doodads:		CARD16
+	num_key_aliases:	CARD16
+	pad:			CARD16
+	label_font:		XKMCountedString
+	properties:		LISTofXKMGeomProperty
+	colors:			LISTofXKMCountedString
+	shapes:			LISTofXKMGeomShape
+	sections:		LISTofXKMGeomSection
+	doodads:		LISTofXKMGeomDoodad
+	key_aliases:		LISTofXKMKeyAlias
+└───
+
+┌───
+  XKMGeomProperty
+	name:			XKMCountedString
+	value:			XKMCountedString
+
+└───
+
+┌───
+  XKMGeomShape
+	name:			XKMCountedString
+	num_outlines:		CARD8
+	primary_idx:		CARD8
+	approx_idx:		CARD8
+	pad:			CARD8
+	outlines:		LISTofXKMOutlineDesc
+└───
+
+┌───
+  XKMOutlineDesc
+	num_points:		CARD8
+	corner_radius:		CARD8
+	pad:			CARD16
+	points:			LISTofXKMPointDesc
+└───
+
+┌───
+  XKMPointDesc
+	x:			INT16
+	y:			INT16
+└───
+
+┌───
+  XKMGeomSection
+	name:			XKMCountedString
+	top:			INT16
+	left:			INT16
+	width:			CARD16
+	height:			CARD16
+	angle:			INT16
+	priority:		CARD8
+	num_rows:		CARD8
+	num_doodads:		CARD8
+	num_overlays:		CARD8
+	pad:			CARD16
+	rows:			LISTofXKMRowDesc
+	doodads:		LISTofXKMGeomDoodad
+	overlays:		LISTofXKMGeomOverlay
+└───
+
+┌───
+  XKMRowDesc
+	top:			INT16
+	left:			INT16
+	num_keys:		CARD8
+	vertical:		BOOL
+	pad:			CARD16
+	keys:			XKMKeyDesc
+└───
+
+┌───
+  XKMKeyDesc
+	name:			XKMKeyname
+	gap:			INT16
+	shape_idx:		CARD8
+	color_idx:		CARD8
+└───
+
+┌───
+  XKMGeomDoodad
+	name:			XKMCountedString
+	type:			CARD8
+	priority:		CARD8
+	top:			INT16
+	left:			INT16
+	pad1:			CARD16
+	pad2:			CARD32
+	pad3:			CARD32
+	───
+        type ⇒ XkbOutlineDoodad ||
+        type ⇒ XkbSolideDoodad
+	⇒
+		type:			CARD8
+		priority:		CARD8
+		top:			INT16
+		left:			INT16
+		angle:			INT16
+		color_idx:		CARD8
+		shape_idx:		CARD8
+		pad0:			CARD16
+		pad1:			CARD32
+	───
+        type ⇒ XkbTextDoodad
+	⇒
+		type:			CARD8
+		priority:		CARD8
+		top:			INT16
+		left:			INT16
+		angle:			INT16
+		width:			CARD16
+		height:			CARD16
+		color_idx:		CARD8
+		pad0:			CARD8
+		pad1:			CARD16
+		text:			XKMCountedString
+		font:			XKMCountedString
+	───
+        type ⇒ XkbIndicatorDoodad
+	⇒
+		type:			CARD8
+		priority:		CARD8
+		top:			INT16
+		left:			INT16
+		shape_idx:		CARD8
+		on_color_idx:		CARD8
+		off_color_idx:		CARD8
+		pad0:			CARD8
+		pad1:			CARD16
+		pad2:			CARD32
+	───
+        type ⇒ XkbLogoDoodad
+	⇒
+		type:			CARD8
+		priority:		CARD8
+		top:			INT16
+		left:			INT16
+		angle:			INT16
+		color_idx:		CARD8
+		shape_idx:		CARD8
+		pad0:			CARD16
+		pad1:			CARD32
+		logo_name:		XKMCountedString
+└───
+
+WARNING: XKMGeomDoodad has variable length depending on the type.
+NOTE: The current server implementation does not use all fields of all
+structures.
+
+┌───
+  XKMOverlayDesc
+	name:			XKMCountedString
+	num_rows:		CARD8
+	pad0:			CARD8
+	pad1:			CARD16
+	rows:			LISTofXKMOverlayRowDesc
+└───
+
+┌───
+  XKMOverlayRowDesc
+	name:			XKMCountedString
+	row_under:		CARD8
+	num_keys:		CARD8
+	pad:			CARD16
+	keys:			LISTofXKMOverlayKeyDesc
+└───
+
+┌───
+  XKMOverlayKeyDesc
+	over:			XKMKeyname
+	under:			XKMKeyname
+└───
+
+                              ❧❧❧❧❧❧❧❧❧❧❧
+
+3.3.6 XKMVirtualMods
+
+┌───
+  XKMOverlayRowDesc
+	section_info:		XKMSectionInfo
+	name:			XKMCountedString
+	bound_mask:		SETofVMODBITS
+	named_mask:		SETofVMODBITS
+	vmods:			LISTofCARD8
+	pad:			pad(vmods)
+	names:			LISTofXKMCountedString
+└───
+
+	VMODBITS:		CARD16
+
+Number of elements in vmods is equal to the number of bits set in
+bound_mask. The padding completes vmods to a multiple of 4 byte units.
+Number of elements in names is equal to the number of bits set in
+named_mask.
--- xorg-server-1.12.0.orig/test/ddxstubs.c
+++ xorg-server-1.12.0/test/ddxstubs.c
@@ -0,0 +1,91 @@
+/**
+ * Copyright © 2012 Apple 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 contains stubs for some symbols which are usually provided by a
+ * DDX.  These stubs should allow the unit tests to build on platforms with
+ * stricter linkers (eg: darwin) when the Xorg DDX is not built.
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include "input.h"
+#include "mi.h"
+
+void DDXRingBell(int volume, int pitch, int duration) {
+}
+
+void ProcessInputEvents(void) {
+    mieqProcessInputEvents();
+}
+
+void OsVendorInit(void) {
+}
+
+void OsVendorFatalError(void) {
+}
+
+void AbortDDX(enum ExitCode error) {
+    OsAbort();
+}
+
+void ddxUseMsg(void) {
+}
+
+int ddxProcessArgument(int argc, char *argv[], int i) {
+    return 0;
+}
+
+void ddxGiveUp( enum ExitCode error ) {
+}
+
+Bool LegalModifier(unsigned int key, DeviceIntPtr pDev) {
+    return TRUE;
+}
+
+#ifdef XQUARTZ
+#include <pthread.h>
+
+BOOL serverRunning = TRUE;
+pthread_mutex_t serverRunningMutex = PTHREAD_MUTEX_INITIALIZER;
+pthread_cond_t serverRunningCond = PTHREAD_COND_INITIALIZER;
+
+int darwinMainScreenX = 0;
+int darwinMainScreenY = 0;
+
+BOOL no_configure_window = FALSE;
+
+void darwinEvents_lock(void) {
+}
+
+void darwinEvents_unlock(void) {
+}
+#endif
+
+#ifdef DDXBEFORERESET
+void
+ddxBeforeReset(void) {
+}
+#endif
+
--- xorg-server-1.12.0.orig/mi/mibstore.c
+++ xorg-server-1.12.0/mi/mibstore.c
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2007 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 "scrnintstr.h"
+#include "mibstore.h"
+
+/*
+ * There is no longer an mi implementation of backing store.  This function
+ * is only for source compatibility with old drivers.
+ *
+ * Note though that you do get backing store for free if your server has
+ * Composite enabled, since the automatic redirection mechanism provides
+ * essentially the same functionality.  See compChangeWindowAttributes()
+ * for the implementation.
+ */
+
+void
+miInitializeBackingStore (ScreenPtr pScreen)
+{
+}
--- xorg-server-1.12.0.orig/config/dbus-api
+++ xorg-server-1.12.0/config/dbus-api
@@ -0,0 +1,40 @@
+D-BUS Configuration API v2
+----------------------------
+
+The X server will register the bus name org.x.config.displayN, and the 
+object /org/x/config/N, where N is the display number.
+
+Currently only hotplugging of input devices is supported.
+
+org.x.config.input:
+    org.x.config.input.version:
+        Returns one unsigned int32, which is the API version.
+
+    org.x.config.input.add:
+        Takes an argument of key/value option pairs in arrays, e.g.:
+         [ss][ss][ss][ss]
+        is the signature for four options.  These options will be passed
+        to the input driver as with any others.
+        Option names beginning with _ are not allowed; they are reserved
+        for internal use.
+
+        Returns a number of signed int32s.  Positive integers are the
+        device IDs of new devices; negative numbers are X error codes,
+        as defined in X.h.  BadMatch will be returned if the options
+        given do not match any device.  BadValue is returned for a malformed
+        message.  (Example: 8 is new device ID 8; -8 is BadMatch.)
+
+        Notably, BadAlloc is never returned: the server internally signals
+        to D-BUS that the attempt failed for lack of memory.
+
+    org.x.config.input.remove:
+        Takes one uint32 argument, which is the device ID to remove, i.e.:
+         u
+        is the signature.
+
+        Returns one signed int32 which represents an X status as defined in
+        X.h. See org.x.config.input.add. Error codes are negative numbers.
+
+    org.x.config.input.listDevices:
+        Lists the currently active devices. No argument. 
+        Return value is sequence of [<id> <name>] [<id> <name>] ..., i.e. [us].
--- xorg-server-1.12.0.orig/hw/xquartz/GL/glcontextmodes.h
+++ xorg-server-1.12.0/hw/xquartz/GL/glcontextmodes.h
@@ -0,0 +1,54 @@
+/*
+ * (C) Copyright IBM Corporation 2003
+ * 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, sub
+ * license, 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
+ * VA LINUX SYSTEM, IBM 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 glcontextmodes.h
+ * \author Ian Romanick <idr@us.ibm.com>
+ */
+
+#ifndef GLCONTEXTMODES_H
+#define GLCONTEXTMODES_H
+
+#include "GL/internal/glcore.h"
+
+#if !defined(IN_MINI_GLX)
+extern GLint _gl_convert_from_x_visual_type( int visualType );
+extern GLint _gl_convert_to_x_visual_type( int visualType );
+extern void _gl_copy_visual_to_context_mode( __GLcontextModes * mode,
+    const __GLXvisualConfig * config );
+extern int _gl_get_context_mode_data( const __GLcontextModes *mode,
+    int attribute, int *value_return );
+#endif /* !defined(IN_MINI_GLX) */
+
+extern __GLcontextModes * _gl_context_modes_create( unsigned count,
+    size_t minimum_size );
+extern void _gl_context_modes_destroy( __GLcontextModes * modes );
+extern  __GLcontextModes *
+    _gl_context_modes_find_visual(__GLcontextModes *modes, int vid);
+extern __GLcontextModes *
+    _gl_context_modes_find_fbconfig(__GLcontextModes *modes, int fbid);
+extern GLboolean _gl_context_modes_are_same( const __GLcontextModes * a,
+    const __GLcontextModes * b );
+
+#endif /* GLCONTEXTMODES_H */
--- xorg-server-1.12.0.orig/hw/xquartz/GL/glcontextmodes.c
+++ xorg-server-1.12.0/hw/xquartz/GL/glcontextmodes.c
@@ -0,0 +1,550 @@
+/*
+ * (C) Copyright IBM Corporation 2003
+ * 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, sub
+ * license, 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
+ * VA LINUX SYSTEM, IBM 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 glcontextmodes.c
+ * Utility routines for working with \c __GLcontextModes structures.  At
+ * some point most or all of these functions will be moved to the Mesa
+ * code base.
+ *
+ * \author Ian Romanick <idr@us.ibm.com>
+ */
+
+#if defined(IN_MINI_GLX)
+#include <GL/gl.h>
+#else
+#if defined(HAVE_DIX_CONFIG_H)
+# include <dix-config.h>
+#endif
+#include <X11/X.h>
+#include <GL/glx.h>
+#include "GL/glxint.h"
+#endif
+
+/* Memory macros */
+#if defined(IN_MINI_GLX)
+# include <stdlib.h>
+# include <string.h>
+# define _mesa_malloc(b) malloc(b)
+# define _mesa_free(m) free(m)
+# define _mesa_memset  memset
+#else
+# ifdef XFree86Server
+# include <os.h>
+# include <string.h>
+#  define _mesa_malloc(b) malloc(b)
+#  define _mesa_free(m)   free(m)
+#  define _mesa_memset   memset
+# else
+#  include <X11/Xlibint.h>
+#  define _mesa_memset memset
+#  define _mesa_malloc(b) Xmalloc(b)
+#  define _mesa_free(m) free(m)
+# endif /* XFree86Server */
+#endif /* !defined(IN_MINI_GLX) */
+
+#include "glcontextmodes.h"
+
+#if !defined(IN_MINI_GLX)
+#define NUM_VISUAL_TYPES   6
+
+/**
+ * Convert an X visual type to a GLX visual type.
+ * 
+ * \param visualType X visual type (i.e., \c TrueColor, \c StaticGray, etc.)
+ *        to be converted.
+ * \return If \c visualType is a valid X visual type, a GLX visual type will
+ *         be returned.  Otherwise \c GLX_NONE will be returned.
+ */
+GLint
+_gl_convert_from_x_visual_type( int visualType )
+{
+    static const int glx_visual_types[ NUM_VISUAL_TYPES ] = {
+	GLX_STATIC_GRAY,  GLX_GRAY_SCALE,
+	GLX_STATIC_COLOR, GLX_PSEUDO_COLOR,
+	GLX_TRUE_COLOR,   GLX_DIRECT_COLOR
+    };
+
+    return ( (unsigned) visualType < NUM_VISUAL_TYPES )
+	? glx_visual_types[ visualType ] : GLX_NONE;
+}
+
+
+/**
+ * Convert a GLX visual type to an X visual type.
+ * 
+ * \param visualType GLX visual type (i.e., \c GLX_TRUE_COLOR, 
+ *                   \c GLX_STATIC_GRAY, etc.) to be converted.
+ * \return If \c visualType is a valid GLX visual type, an X visual type will
+ *         be returned.  Otherwise -1 will be returned.
+ */
+GLint
+_gl_convert_to_x_visual_type( int visualType )
+{
+    static const int x_visual_types[ NUM_VISUAL_TYPES ] = {
+	TrueColor,   DirectColor,
+	PseudoColor, StaticColor,
+	GrayScale,   StaticGray
+    };
+
+    return ( (unsigned) (visualType - GLX_TRUE_COLOR) < NUM_VISUAL_TYPES )
+	? x_visual_types[ visualType - GLX_TRUE_COLOR ] : -1;
+}
+
+
+/**
+ * Copy a GLX visual config structure to a GL context mode structure.  All
+ * of the fields in \c config are copied to \c mode.  Additional fields in
+ * \c mode that can be derrived from the fields of \c config (i.e.,
+ * \c haveDepthBuffer) are also filled in.  The remaining fields in \c mode
+ * that cannot be derived are set to default values.
+ * 
+ * \param mode   Destination GL context mode.
+ * \param config Source GLX visual config.
+ * 
+ * \note
+ * The \c fbconfigID and \c visualID fields of the \c __GLcontextModes
+ * structure will be set to the \c vid of the \c __GLXvisualConfig structure.
+ */
+void
+_gl_copy_visual_to_context_mode( __GLcontextModes * mode,
+				 const __GLXvisualConfig * config )
+{
+    __GLcontextModes * const next = mode->next;
+
+    (void) _mesa_memset( mode, 0, sizeof( __GLcontextModes ) );
+    mode->next = next;
+
+    mode->visualID = config->vid;
+    mode->visualType = _gl_convert_from_x_visual_type( config->class );
+    mode->xRenderable = GL_TRUE;
+    mode->fbconfigID = config->vid;
+    mode->drawableType = GLX_WINDOW_BIT | GLX_PIXMAP_BIT;
+
+    mode->rgbMode = (config->rgba != 0);
+    mode->renderType = (mode->rgbMode) ? GLX_RGBA_BIT : GLX_COLOR_INDEX_BIT;
+
+    mode->colorIndexMode = !(mode->rgbMode);
+    mode->doubleBufferMode = (config->doubleBuffer != 0);
+    mode->stereoMode = (config->stereo != 0);
+
+    mode->haveAccumBuffer = ((config->accumRedSize +
+			      config->accumGreenSize +
+			      config->accumBlueSize +
+			      config->accumAlphaSize) > 0);
+    mode->haveDepthBuffer = (config->depthSize > 0);
+    mode->haveStencilBuffer = (config->stencilSize > 0);
+
+    mode->redBits = config->redSize;
+    mode->greenBits = config->greenSize;
+    mode->blueBits = config->blueSize;
+    mode->alphaBits = config->alphaSize;
+    mode->redMask = config->redMask;
+    mode->greenMask = config->greenMask;
+    mode->blueMask = config->blueMask;
+    mode->alphaMask = config->alphaMask;
+    mode->rgbBits = mode->rgbMode ? config->bufferSize : 0;
+    mode->indexBits = mode->colorIndexMode ? config->bufferSize : 0;
+
+    mode->accumRedBits = config->accumRedSize;
+    mode->accumGreenBits = config->accumGreenSize;
+    mode->accumBlueBits = config->accumBlueSize;
+    mode->accumAlphaBits = config->accumAlphaSize;
+    mode->depthBits = config->depthSize;
+    mode->stencilBits = config->stencilSize;
+
+    mode->numAuxBuffers = config->auxBuffers;
+    mode->level = config->level;
+
+    mode->visualRating = config->visualRating;
+    mode->transparentPixel = config->transparentPixel;
+    mode->transparentRed   = config->transparentRed;
+    mode->transparentGreen = config->transparentGreen;
+    mode->transparentBlue  = config->transparentBlue;
+    mode->transparentAlpha = config->transparentAlpha;
+    mode->transparentIndex = config->transparentIndex;
+    mode->samples = config->multiSampleSize;
+    mode->sampleBuffers = config->nMultiSampleBuffers;
+    /* mode->visualSelectGroup = config->visualSelectGroup; ? */
+
+    mode->swapMethod = GLX_SWAP_UNDEFINED_OML;
+
+    mode->bindToTextureRgb = (mode->rgbMode) ? GL_TRUE : GL_FALSE;
+    mode->bindToTextureRgba = (mode->rgbMode && mode->alphaBits) ?
+	GL_TRUE : GL_FALSE;
+    mode->bindToMipmapTexture = mode->rgbMode ? GL_TRUE : GL_FALSE;
+    mode->bindToTextureTargets = mode->rgbMode ?
+	GLX_TEXTURE_1D_BIT_EXT | GLX_TEXTURE_2D_BIT_EXT |
+	GLX_TEXTURE_RECTANGLE_BIT_EXT : 0;
+    mode->yInverted = GL_FALSE;
+}
+
+
+/**
+ * Get data from a GL context mode.
+ * 
+ * \param mode         GL context mode whose data is to be returned.
+ * \param attribute    Attribute of \c mode that is to be returned.
+ * \param value_return Location to store the data member of \c mode.
+ * \return  If \c attribute is a valid attribute of \c mode, zero is
+ *          returned.  Otherwise \c GLX_BAD_ATTRIBUTE is returned.
+ */
+int
+_gl_get_context_mode_data(const __GLcontextModes *mode, int attribute,
+			  int *value_return)
+{
+    switch (attribute) {
+      case GLX_USE_GL:
+	*value_return = GL_TRUE;
+	return 0;
+      case GLX_BUFFER_SIZE:
+	*value_return = mode->rgbBits;
+	return 0;
+      case GLX_RGBA:
+	*value_return = mode->rgbMode;
+	return 0;
+      case GLX_RED_SIZE:
+	*value_return = mode->redBits;
+	return 0;
+      case GLX_GREEN_SIZE:
+	*value_return = mode->greenBits;
+	return 0;
+      case GLX_BLUE_SIZE:
+	*value_return = mode->blueBits;
+	return 0;
+      case GLX_ALPHA_SIZE:
+	*value_return = mode->alphaBits;
+	return 0;
+      case GLX_DOUBLEBUFFER:
+	*value_return = mode->doubleBufferMode;
+	return 0;
+      case GLX_STEREO:
+	*value_return = mode->stereoMode;
+	return 0;
+      case GLX_AUX_BUFFERS:
+	*value_return = mode->numAuxBuffers;
+	return 0;
+      case GLX_DEPTH_SIZE:
+	*value_return = mode->depthBits;
+	return 0;
+      case GLX_STENCIL_SIZE:
+	*value_return = mode->stencilBits;
+	return 0;
+      case GLX_ACCUM_RED_SIZE:
+	*value_return = mode->accumRedBits;
+	return 0;
+      case GLX_ACCUM_GREEN_SIZE:
+	*value_return = mode->accumGreenBits;
+	return 0;
+      case GLX_ACCUM_BLUE_SIZE:
+	*value_return = mode->accumBlueBits;
+	return 0;
+      case GLX_ACCUM_ALPHA_SIZE:
+	*value_return = mode->accumAlphaBits;
+	return 0;
+      case GLX_LEVEL:
+	*value_return = mode->level;
+	return 0;
+      case GLX_TRANSPARENT_TYPE_EXT:
+	*value_return = mode->transparentPixel;
+	return 0;
+      case GLX_TRANSPARENT_RED_VALUE:
+	*value_return = mode->transparentRed;
+	return 0;
+      case GLX_TRANSPARENT_GREEN_VALUE:
+	*value_return = mode->transparentGreen;
+	return 0;
+      case GLX_TRANSPARENT_BLUE_VALUE:
+	*value_return = mode->transparentBlue;
+	return 0;
+      case GLX_TRANSPARENT_ALPHA_VALUE:
+	*value_return = mode->transparentAlpha;
+	return 0;
+      case GLX_TRANSPARENT_INDEX_VALUE:
+	*value_return = mode->transparentIndex;
+	return 0;
+      case GLX_X_VISUAL_TYPE:
+	*value_return = mode->visualType;
+	return 0;
+      case GLX_CONFIG_CAVEAT:
+	*value_return = mode->visualRating;
+	return 0;
+      case GLX_VISUAL_ID:
+	*value_return = mode->visualID;
+	return 0;
+      case GLX_DRAWABLE_TYPE:
+	*value_return = mode->drawableType;
+	return 0;
+      case GLX_RENDER_TYPE:
+	*value_return = mode->renderType;
+	return 0;
+      case GLX_X_RENDERABLE:
+	*value_return = mode->xRenderable;
+	return 0;
+      case GLX_FBCONFIG_ID:
+	*value_return = mode->fbconfigID;
+	return 0;
+      case GLX_MAX_PBUFFER_WIDTH:
+	*value_return = mode->maxPbufferWidth;
+	return 0;
+      case GLX_MAX_PBUFFER_HEIGHT:
+	*value_return = mode->maxPbufferHeight;
+	return 0;
+      case GLX_MAX_PBUFFER_PIXELS:
+	*value_return = mode->maxPbufferPixels;
+	return 0;
+      case GLX_OPTIMAL_PBUFFER_WIDTH_SGIX:
+	*value_return = mode->optimalPbufferWidth;
+	return 0;
+      case GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX:
+	*value_return = mode->optimalPbufferHeight;
+	return 0;
+      case GLX_SWAP_METHOD_OML:
+	*value_return = mode->swapMethod;
+	return 0;
+      case GLX_SAMPLE_BUFFERS_SGIS:
+	*value_return = mode->sampleBuffers;
+	return 0;
+      case GLX_SAMPLES_SGIS:
+	*value_return = mode->samples;
+	return 0;
+      case GLX_BIND_TO_TEXTURE_RGB_EXT:
+	*value_return = mode->bindToTextureRgb;
+	return 0;
+      case GLX_BIND_TO_TEXTURE_RGBA_EXT:
+	*value_return = mode->bindToTextureRgba;
+	return 0;
+      case GLX_BIND_TO_MIPMAP_TEXTURE_EXT:
+	*value_return = mode->bindToMipmapTexture == GL_TRUE ? GL_TRUE :
+	    GL_FALSE;
+	return 0;
+      case GLX_BIND_TO_TEXTURE_TARGETS_EXT:
+	*value_return = mode->bindToTextureTargets;
+	return 0;
+      case GLX_Y_INVERTED_EXT:
+	*value_return = mode->yInverted;
+	return 0;
+
+      /* Applications are NOT allowed to query GLX_VISUAL_SELECT_GROUP_SGIX.
+       * It is ONLY for communication between the GLX client and the GLX
+       * server.
+       */
+      case GLX_VISUAL_SELECT_GROUP_SGIX:
+      default:
+	return GLX_BAD_ATTRIBUTE;
+    }
+}
+#endif /* !defined(IN_MINI_GLX) */
+
+
+/**
+ * Allocate a linked list of \c __GLcontextModes structures.  The fields of
+ * each structure will be initialized to "reasonable" default values.  In
+ * most cases this is the default value defined by table 3.4 of the GLX
+ * 1.3 specification.  This means that most values are either initialized to
+ * zero or \c GLX_DONT_CARE (which is -1).  As support for additional
+ * extensions is added, the new values will be initialized to appropriate
+ * values from the extension specification.
+ * 
+ * \param count         Number of structures to allocate.
+ * \param minimum_size  Minimum size of a structure to allocate.  This allows
+ *                      for differences in the version of the
+ *                      \c __GLcontextModes stucture used in libGL and in a
+ *                      DRI-based driver.
+ * \returns A pointer to the first element in a linked list of \c count
+ *          stuctures on success, or \c NULL on failure.
+ * 
+ * \warning Use of \c minimum_size does \b not guarantee binary compatibility.
+ *          The fundamental assumption is that if the \c minimum_size
+ *          specified by the driver and the size of the \c __GLcontextModes
+ *          structure in libGL is the same, then the meaning of each byte in
+ *          the structure is the same in both places.  \b Be \b careful!
+ *          Basically this means that fields have to be added in libGL and
+ *          then propagated to drivers.  Drivers should \b never arbitrarilly
+ *          extend the \c __GLcontextModes data-structure.
+ */
+__GLcontextModes *
+_gl_context_modes_create( unsigned count, size_t minimum_size )
+{
+   const size_t size = (minimum_size > sizeof( __GLcontextModes ))
+       ? minimum_size : sizeof( __GLcontextModes );
+   __GLcontextModes * base = NULL;
+   __GLcontextModes ** next;
+   unsigned   i;
+
+   next = & base;
+   for ( i = 0 ; i < count ; i++ ) {
+      *next = (__GLcontextModes *) _mesa_malloc( size );
+      if ( *next == NULL ) {
+	 _gl_context_modes_destroy( base );
+	 base = NULL;
+	 break;
+      }
+      
+      (void) _mesa_memset( *next, 0, size );
+      (*next)->visualID = GLX_DONT_CARE;
+      (*next)->visualType = GLX_DONT_CARE;
+      (*next)->visualRating = GLX_NONE;
+      (*next)->transparentPixel = GLX_NONE;
+      (*next)->transparentRed = GLX_DONT_CARE;
+      (*next)->transparentGreen = GLX_DONT_CARE;
+      (*next)->transparentBlue = GLX_DONT_CARE;
+      (*next)->transparentAlpha = GLX_DONT_CARE;
+      (*next)->transparentIndex = GLX_DONT_CARE;
+      (*next)->xRenderable = GLX_DONT_CARE;
+      (*next)->fbconfigID = GLX_DONT_CARE;
+      (*next)->swapMethod = GLX_SWAP_UNDEFINED_OML;
+      (*next)->bindToTextureRgb = GLX_DONT_CARE;
+      (*next)->bindToTextureRgba = GLX_DONT_CARE;
+      (*next)->bindToMipmapTexture = GLX_DONT_CARE;
+      (*next)->bindToTextureTargets = GLX_DONT_CARE;
+      (*next)->yInverted = GLX_DONT_CARE;
+
+      next = & ((*next)->next);
+   }
+
+   return base;
+}
+
+
+/**
+ * Destroy a linked list of \c __GLcontextModes structures created by
+ * \c _gl_context_modes_create.
+ * 
+ * \param modes  Linked list of structures to be destroyed.  All structres
+ *               in the list will be freed.
+ */
+void
+_gl_context_modes_destroy( __GLcontextModes * modes )
+{
+   while ( modes != NULL ) {
+      __GLcontextModes * const next = modes->next;
+
+      _mesa_free( modes );
+      modes = next;
+   }
+}
+
+
+/**
+ * Find a context mode matching a Visual ID.
+ *
+ * \param modes  List list of context-mode structures to be searched.
+ * \param vid    Visual ID to be found.
+ * \returns A pointer to a context-mode in \c modes if \c vid was found in
+ *          the list, or \c NULL if it was not.
+ */
+
+__GLcontextModes *
+_gl_context_modes_find_visual(__GLcontextModes *modes, int vid)
+{
+    __GLcontextModes *m;
+
+    for (m = modes; m != NULL; m = m->next)
+	if (m->visualID == vid)
+	    return m;
+
+    return NULL;
+}
+
+__GLcontextModes *
+_gl_context_modes_find_fbconfig(__GLcontextModes *modes, int fbid)
+{
+    __GLcontextModes *m;
+
+    for (m = modes; m != NULL; m = m->next)
+	if (m->fbconfigID == fbid)
+	    return m;
+
+    return NULL;
+}
+
+/**
+ * Determine if two context-modes are the same.  This is intended to be used
+ * by libGL implementations to compare to sets of driver generated FBconfigs.
+ * 
+ * \param a  Context-mode to be compared.
+ * \param b  Context-mode to be compared.
+ * \returns \c GL_TRUE if the two context-modes are the same.  \c GL_FALSE is
+ *          returned otherwise.
+ */
+GLboolean
+_gl_context_modes_are_same( const __GLcontextModes * a,
+			    const __GLcontextModes * b )
+{
+    return( (a->rgbMode == b->rgbMode) &&
+	    (a->floatMode == b->floatMode) &&
+	    (a->colorIndexMode == b->colorIndexMode) &&
+	    (a->doubleBufferMode == b->doubleBufferMode) &&
+	    (a->stereoMode == b->stereoMode) &&
+	    (a->redBits == b->redBits) &&
+	    (a->greenBits == b->greenBits) &&
+	    (a->blueBits == b->blueBits) &&
+	    (a->alphaBits == b->alphaBits) &&
+#if 0 /* For some reason these don't get set on the client-side in libGL. */
+	    (a->redMask == b->redMask) &&
+	    (a->greenMask == b->greenMask) &&
+	    (a->blueMask == b->blueMask) &&
+	    (a->alphaMask == b->alphaMask) &&
+#endif
+	    (a->rgbBits == b->rgbBits) &&
+	    (a->indexBits == b->indexBits) &&
+	    (a->accumRedBits == b->accumRedBits) &&
+	    (a->accumGreenBits == b->accumGreenBits) &&
+	    (a->accumBlueBits == b->accumBlueBits) &&
+	    (a->accumAlphaBits == b->accumAlphaBits) &&
+	    (a->depthBits == b->depthBits) &&
+	    (a->stencilBits == b->stencilBits) &&
+	    (a->numAuxBuffers == b->numAuxBuffers) &&
+	    (a->level == b->level) &&
+	    (a->pixmapMode == b->pixmapMode) &&
+	    (a->visualRating == b->visualRating) &&
+
+	    (a->transparentPixel == b->transparentPixel) &&
+
+	    ((a->transparentPixel != GLX_TRANSPARENT_RGB) ||
+	     ((a->transparentRed == b->transparentRed) &&
+	      (a->transparentGreen == b->transparentGreen) &&
+	      (a->transparentBlue == b->transparentBlue) &&
+	      (a->transparentAlpha == b->transparentAlpha))) &&
+
+	    ((a->transparentPixel != GLX_TRANSPARENT_INDEX) || 
+	     (a->transparentIndex == b->transparentIndex)) &&
+
+	    (a->sampleBuffers == b->sampleBuffers) &&
+	    (a->samples == b->samples) &&
+	    ((a->drawableType & b->drawableType) != 0) &&
+	    (a->renderType == b->renderType) &&
+	    (a->maxPbufferWidth == b->maxPbufferWidth) &&
+	    (a->maxPbufferHeight == b->maxPbufferHeight) &&
+	    (a->maxPbufferPixels == b->maxPbufferPixels) &&
+	    (a->optimalPbufferWidth == b->optimalPbufferWidth) &&
+	    (a->optimalPbufferHeight == b->optimalPbufferHeight) &&
+	    (a->swapMethod == b->swapMethod) &&
+	    (a->bindToTextureRgb == b->bindToTextureRgb) &&
+	    (a->bindToTextureRgba == b->bindToTextureRgba) &&
+	    (a->bindToMipmapTexture == b->bindToMipmapTexture) &&
+	    (a->bindToTextureTargets == b->bindToTextureTargets) &&
+	    (a->yInverted == b->yInverted) );
+}
--- xorg-server-1.12.0.orig/hw/xwin/winmonitors.h
+++ xorg-server-1.12.0/hw/xwin/winmonitors.h
@@ -0,0 +1,14 @@
+
+/* data returned for monitor information */
+struct GetMonitorInfoData {
+    int  requestedMonitor;
+    int  monitorNum;
+    Bool bUserSpecifiedMonitor;
+    Bool bMonitorSpecifiedExists;
+    int  monitorOffsetX;
+    int  monitorOffsetY;
+    int  monitorHeight;
+    int  monitorWidth;
+};
+
+Bool QueryMonitor(int index, struct GetMonitorInfoData *data);
--- xorg-server-1.12.0.orig/hw/xwin/winglobals.h
+++ xorg-server-1.12.0/hw/xwin/winglobals.h
@@ -0,0 +1,88 @@
+/*
+  File: winglobals.h
+  Purpose: declarations for global variables
+
+  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 WINGLOBALS_H
+#define WINGLOBALS_H
+
+/*
+ * References to external symbols
+ */
+
+extern int			g_iNumScreens;
+extern int			g_iLastScreen;
+extern char *			g_pszCommandLine;
+extern Bool			g_fSilentFatalError;
+extern const char *		g_pszLogFile;
+#ifdef RELOCATE_PROJECTROOT
+extern Bool			g_fLogFileChanged;
+#endif
+extern int			g_iLogVerbose;
+extern Bool			g_fLogInited;
+
+extern Bool			g_fAuthEnabled;
+extern Bool			g_fXdmcpEnabled;
+
+extern Bool			g_fNoHelpMessageBox;
+extern Bool			g_fSilentDupError;
+extern Bool                     g_fNativeGl;
+
+extern HWND			g_hDlgDepthChange;
+extern HWND			g_hDlgExit;
+extern HWND			g_hDlgAbout;
+
+extern Bool 			g_fSoftwareCursor;
+extern Bool			g_fCursor;
+
+#ifdef XWIN_CLIPBOARD
+
+/* Typedef for DIX wrapper functions */
+typedef int (*winDispatchProcPtr) (ClientPtr);
+
+/*
+ * Wrapped DIX functions
+ */
+extern winDispatchProcPtr	winProcEstablishConnectionOrig;
+extern winDispatchProcPtr	winProcQueryTreeOrig;
+extern winDispatchProcPtr	winProcSetSelectionOwnerOrig;
+#endif
+
+/* The global X default icons */
+#if defined(XWIN_MULTIWINDOW)
+extern HICON                    g_hIconX;
+extern HICON                    g_hSmallIconX;
+#endif
+
+#ifdef XWIN_MULTIWINDOW
+extern DWORD			g_dwCurrentThreadID;
+#endif
+
+extern Bool			g_fKeyboardHookLL;
+extern Bool			g_fButton[3];
+
+#ifdef XWIN_MULTIWINDOWEXTWM
+extern Bool			g_fNoConfigureWindow;
+#endif
+
+#endif /* WINGLOBALS_H */
--- xorg-server-1.12.0.orig/hw/xwin/glx/wgl_ext_api.h
+++ xorg-server-1.12.0/hw/xwin/glx/wgl_ext_api.h
@@ -0,0 +1,87 @@
+/*
+ * File: wgl_ext_api.h
+ * Purpose: Wrapper functions for Win32 OpenGL wgl extension functions
+ *
+ * Authors: Jon TURNEY
+ *
+ * Copyright (c) Jon TURNEY 2009
+ *
+ *
+ * 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.
+ */
+
+#ifndef wgl_ext_api_h
+#define wgl_ext_api_h
+
+#include <GL/wglext.h>
+
+void wglResolveExtensionProcs(void);
+
+/*
+  Prototypes for wrapper functions we actually use
+  XXX: should be automatically generated as well
+*/
+
+const char *wglGetExtensionsStringARBWrapper(HDC hdc);
+BOOL wglMakeContextCurrentARBWrapper(HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
+HDC wglGetCurrentReadDCARBWrapper(VOID);
+
+BOOL wglGetPixelFormatAttribivARBWrapper(HDC hdc,
+                                          int iPixelFormat,
+                                          int iLayerPlane,
+                                          UINT nAttributes,
+                                          const int *piAttributes,
+                                          int *piValues);
+
+BOOL wglGetPixelFormatAttribfvARBWrapper(HDC hdc,
+                                          int iPixelFormat,
+                                          int iLayerPlane,
+                                          UINT nAttributes,
+                                          const int *piAttributes,
+                                          FLOAT *pfValues);
+
+BOOL wglChoosePixelFormatARBWrapper(HDC hdc,
+                                     const int *piAttribIList,
+                                     const FLOAT *pfAttribFList,
+                                     UINT nMaxFormats,
+                                     int *piFormats,
+                                     UINT *nNumFormats);
+
+HPBUFFERARB wglCreatePbufferARBWrapper(HDC hDC,
+                                       int iPixelFormat,
+                                       int iWidth,
+                                       int iHeight,
+                                       const int *piAttribList);
+
+HDC wglGetPbufferDCARBWrapper(HPBUFFERARB hPbuffer);
+
+int wglReleasePbufferDCARBWrapper(HPBUFFERARB hPbuffer,
+                                  HDC hDC);
+
+BOOL wglDestroyPbufferARBWrapper(HPBUFFERARB hPbuffer);
+
+BOOL wglQueryPbufferARBWrapper(HPBUFFERARB hPbuffer,
+                                int iAttribute,
+                                int *piValue);
+
+BOOL wglSwapIntervalEXTWrapper(int interval);
+
+int wglGetSwapIntervalEXTWrapper(void);
+
+#endif /* wgl_ext_api_h */
--- xorg-server-1.12.0.orig/hw/kdrive/Xkdrive.man
+++ xorg-server-1.12.0/hw/kdrive/Xkdrive.man
@@ -0,0 +1,57 @@
+.\" $RCSId: xc/programs/Xserver/hw/kdrive/Xkdrive.man,v 1.3 2001/01/24 00:06:10 dawes Exp $
+.\"
+.TH Xkdrive 1 __vendorversion__
+.SH NAME
+Xkdrive \- tiny X server
+.SH SYNOPSIS
+.B Xvesa
+.RI [ :display ]
+.RI [ option ...]
+
+.B Xfbdev
+.RI [ :display ]
+.RI [ option ...]
+.SH DESCRIPTION
+.B Xkdrive
+is a family of X servers designed to be particularly small.  This
+manual page describes the common functionality of the 
+.B Xkdrive
+servers; for information on a specific X server, please refer to the
+relevant manual page.
+.SH OPTIONS
+In addition to the standard options accepted by all X servers (see
+Xserver(1)), all the 
+.B Xkdrive
+servers accept the following options:
+.TP 8
+.B -card \fIpcmcia\fP
+use pcmcia card as additional screen.
+.TP 8
+.B -dumb
+disable hardware acceleration.
+.TP 8
+.B -origin \fIX\fP,\fIY\fP
+Locates the next screen in the Xinerama virtual screen.
+.TP 8
+.B -screen \fIwidth\fBx\fIheight\fR[\fBx\fIdepth\fR[\fBx\fIfreq\fR]]\fR[\fB@\fIrotation\fR]\fB
+use a screen of the specified \fIwidth\fP, \fIheight\fP, screen \fIdepth\fP, \fIfrequency\fP, and \fIrotation\fP (0, 90, 180 and 270 are legal values).
+.TP 8
+.B -softCursor
+disable the hardware cursor.
+.TP 8
+.B -videoTest
+start the server, pause momentarily, and exit.
+.TP 8
+.B -zaphod
+disable switching screens by moving the pointer across a screen boundary.
+.TP 8
+.B -2button
+enable emulation of a middle mouse button by chording.
+.TP 8
+.B -3button
+disable emulation of a middle mouse button by chording.
+.SH SEE ALSO
+X(__miscmansuffix__), Xserver(1), xdm(1), xinit(1), Xvesa(1), Xfbdev(1).
+.SH AUTHORS
+The Xkdrive common core was written by Keith Packard,
+and is based on the Sample Implementation of X.
--- xorg-server-1.12.0.orig/hw/kdrive/fbdev/Xfbdev.man
+++ xorg-server-1.12.0/hw/kdrive/fbdev/Xfbdev.man
@@ -0,0 +1,28 @@
+.\" $RCSId: xc/programs/Xserver/hw/kdrive/fbdev/Xfbdev.man,v 1.4 2001/01/27 18:20:40 dawes Exp $
+.\"
+.TH Xfbdev 1 __vendorversion__
+.SH NAME
+Xfbdev \- Linux framebuffer device tiny X server
+.SH SYNOPSIS
+.B Xfbdev
+.RI [ :display ] 
+.RI [ option ...]
+.SH DESCRIPTION
+.B Xfbdev
+is a generic X server for Linux.
+.B Xfbdev
+doesn't know about any particular hardware, and uses the framebuffer
+provided by the Linux framebuffer device.
+.SH OPTIONS
+.B Xfbdev
+accepts the common options of the Xkdrive family of servers.  Please
+see Xkdrive(1).
+.SH KEYBOARD
+To be written.
+.SH SEE ALSO
+X(__miscmansuffix__), Xserver(1), Xkdrive(1), xdm(1), xinit(1).
+.SH AUTHORS
+The
+.B Xfbdev
+server was written by Keith Packard.
+
--- xorg-server-1.12.0.orig/hw/kdrive/ephyr/ephyrproxyext.c
+++ xorg-server-1.12.0/hw/kdrive/ephyr/ephyrproxyext.c
@@ -0,0 +1,119 @@
+/*
+ * Xephyr - A kdrive X server thats runs in a host X window.
+ *          Authored by Matthew Allum <mallum@openedhand.com>
+ * 
+ * Copyright © 2007 OpenedHand Ltd 
+ *
+ * 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 OpenedHand Ltd not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. OpenedHand Ltd makes no
+ * representations about the suitability of this software for any purpose.  It
+ * is provided "as is" without express or implied warranty.
+ *
+ * OpenedHand Ltd DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL OpenedHand Ltd 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.
+ *
+ * Authors:
+ *    Dodji Seketeli <dodji@openedhand.com>
+ */
+
+/*
+ * \file
+ * This file defines a proxy extension that forwards requests.
+ * When a request to extension FOO is sent to Xephyr, that request is forwared
+ * to the host X, without even trying to know what the request means.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <kdrive-config.h>
+#endif
+
+#include "misc.h"
+#include "dixstruct.h"
+#include "extnsionst.h"
+#include "ephyrproxyext.h"
+#define _HAVE_XALLOC_DECLS
+#include "ephyrlog.h"
+#include "ephyrhostproxy.h"
+#include "hostx.h"
+
+static Bool ephyrProxyGetHostExtensionInfo (const char *a_ext_name,
+                                            int *a_major_opcode,
+                                            int *a_first_event,
+                                            int *a_first_error) ;
+
+static int ephyrProxyProcDispatch (ClientPtr client) ;
+
+static Bool
+ephyrProxyGetHostExtensionInfo (const char *a_ext_name,
+                                int *a_major_opcode,
+                                int *a_first_event,
+                                int *a_first_error)
+{
+    return hostx_get_extension_info (a_ext_name, a_major_opcode,
+                                     a_first_event, a_first_error) ;
+}
+
+static int
+ephyrProxyProcDispatch (ClientPtr a_client)
+{
+    int res=BadImplementation ;
+    struct XReply reply ;
+
+    if (!ephyrHostProxyDoForward (a_client->requestBuffer, &reply, FALSE)) {
+        EPHYR_LOG_ERROR ("forwarding failed\n") ;
+        goto out ;
+    }
+    reply.sequence_number = a_client->sequence;
+    res = Success ;
+
+    WriteToClient(a_client, 32, (char *)&reply);
+
+out:
+    return res ;
+}
+
+static void
+ephyrProxyProcReset (ExtensionEntry *a_entry)
+{
+}
+
+Bool
+ephyrProxyExtensionInit (const char *a_extension_name)
+{
+    Bool is_ok = FALSE ;
+    int major_opcode=0, first_event=0, first_error=0;
+    ExtensionEntry *ext=NULL ;
+
+    if (!ephyrProxyGetHostExtensionInfo (a_extension_name,
+                                         &major_opcode,
+                                         &first_event,
+                                         &first_error)) {
+        EPHYR_LOG ("failed to query extension %s from host\n", a_extension_name) ;
+        goto out;
+    }
+    ext = AddExtension ((char*)a_extension_name, 0, 0,
+                        ephyrProxyProcDispatch,
+                        ephyrProxyProcDispatch,
+                        ephyrProxyProcReset,
+                        StandardMinorOpcode) ;
+    if (!ext) {
+        EPHYR_LOG_ERROR ("failed to add the extension\n") ;
+        goto out ;
+    }
+    is_ok = TRUE ;
+
+out:
+    EPHYR_LOG ("leave\n") ;
+    return is_ok ;
+}
+
--- xorg-server-1.12.0.orig/hw/kdrive/ephyr/ephyrhostproxy.h
+++ xorg-server-1.12.0/hw/kdrive/ephyr/ephyrhostproxy.h
@@ -0,0 +1,51 @@
+/*
+ * Xephyr - A kdrive X server thats runs in a host X window.
+ *          Authored by Matthew Allum <mallum@openedhand.com>
+ * 
+ * Copyright © 2007 OpenedHand Ltd 
+ *
+ * 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 OpenedHand Ltd not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. OpenedHand Ltd makes no
+ * representations about the suitability of this software for any purpose.  It
+ * is provided "as is" without express or implied warranty.
+ *
+ * OpenedHand Ltd DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL OpenedHand Ltd 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.
+ *
+ * Authors:
+ *    Dodji Seketeli <dodji@openedhand.com>
+ */
+
+#ifndef __EPHYRHOSTPROXY_H__
+#define __EPHYRHOSTPROXY_H__
+
+struct XReply {
+    int8_t type ;/*X_Reply*/
+    int8_t foo;
+    int16_t sequence_number ;
+    int32_t length ;
+    /*following is some data up to 32 bytes lenght*/
+    int32_t pad0 ;
+    int32_t pad1 ;
+    int32_t pad2 ;
+    int32_t pad3 ;
+    int32_t pad4 ;
+    int32_t pad5 ;
+};
+
+Bool
+ephyrHostProxyDoForward (pointer a_request_buffer,
+                         struct XReply *a_reply,
+                         Bool a_do_swap) ;
+
+#endif /*__EPHYRHOSTPROXY_H__*/
--- xorg-server-1.12.0.orig/hw/kdrive/ephyr/ephyrproxyext.h
+++ xorg-server-1.12.0/hw/kdrive/ephyr/ephyrproxyext.h
@@ -0,0 +1,34 @@
+/*
+ * Xephyr - A kdrive X server thats runs in a host X window.
+ *          Authored by Matthew Allum <mallum@openedhand.com>
+ * 
+ * Copyright © 2007 OpenedHand Ltd 
+ *
+ * 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 OpenedHand Ltd not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. OpenedHand Ltd makes no
+ * representations about the suitability of this software for any purpose.  It
+ * is provided "as is" without express or implied warranty.
+ *
+ * OpenedHand Ltd DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL OpenedHand Ltd 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.
+ *
+ * Authors:
+ *    Dodji Seketeli <dodji@openedhand.com>
+ */
+#ifndef __EPHYRPROXYEXT_H__
+#define __EPHYRPROXYEXT_H__
+
+Bool ephyrProxyExtensionInit (const char *a_extension_name) ;
+
+#endif /*__EPHYRPROXYEXT_H__*/
+
--- xorg-server-1.12.0.orig/hw/kdrive/ephyr/ephyrhostproxy.c
+++ xorg-server-1.12.0/hw/kdrive/ephyr/ephyrhostproxy.c
@@ -0,0 +1,94 @@
+/*
+ * Xephyr - A kdrive X server thats runs in a host X window.
+ *          Authored by Matthew Allum <mallum@openedhand.com>
+ * 
+ * Copyright © 2007 OpenedHand Ltd 
+ *
+ * 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 OpenedHand Ltd not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. OpenedHand Ltd makes no
+ * representations about the suitability of this software for any purpose.  It
+ * is provided "as is" without express or implied warranty.
+ *
+ * OpenedHand Ltd DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL OpenedHand Ltd 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.
+ *
+ * Authors:
+ *    Dodji Seketeli <dodji@openedhand.com>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <kdrive-config.h>
+#endif
+
+#include <X11/Xlibint.h>
+#define _HAVE_XALLOC_DECLS
+#include "ephyrlog.h"
+#include "ephyrhostproxy.h"
+#include "hostx.h"
+
+/* byte swap a short */
+#define swaps(x, n) { \
+    n = ((char *) (x))[0];\
+    ((char *) (x))[0] = ((char *) (x))[1];\
+    ((char *) (x))[1] = n; }
+
+#define GetXReq(req) \
+    WORD64ALIGN ;\
+    if ((dpy->bufptr + SIZEOF(xReq)) > dpy->bufmax)\
+            _XFlush(dpy);\
+    req = (xReq *)(dpy->last_req = dpy->bufptr);\
+    dpy->bufptr += SIZEOF(xReq);\
+    dpy->request++
+
+
+Bool
+ephyrHostProxyDoForward (pointer a_request_buffer,
+                         struct XReply *a_reply,
+                         Bool a_do_swap)
+{
+    Bool is_ok = FALSE ;
+    int n=0 ;
+    Display *dpy=hostx_get_display () ;
+    xReq *in_req = (xReq*) a_request_buffer ;
+    xReq *forward_req=NULL ;
+    struct XReply reply ;
+
+    EPHYR_RETURN_VAL_IF_FAIL (in_req && dpy, FALSE) ;
+
+    EPHYR_LOG ("enter\n") ;
+
+    if (a_do_swap) {
+        swaps(&in_req->length) ;
+    }
+    EPHYR_LOG ("Req {type:%d, data:%d, length:%d}\n",
+               in_req->reqType, in_req->data, in_req->length) ;
+    GetXReq (forward_req) ;
+    memmove (forward_req, in_req, 4) ;
+
+    if (!_XReply (dpy, (xReply*) &reply, 0, FALSE)) {
+        EPHYR_LOG_ERROR ("failed to get reply\n") ;
+        goto out;
+    }
+    EPHYR_LOG ("XReply{type:%d, foo:%d, seqnum:%d, length:%d}\n",
+               reply.type, reply.foo, reply.sequence_number, reply.length) ;
+
+    if (a_reply) {
+        memmove (a_reply, &reply, sizeof (reply)) ;
+    }
+    is_ok = TRUE ;
+
+out:
+    EPHYR_LOG ("leave\n") ;
+    return is_ok ;
+}
+