summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaleb Keithley <kaleb@freedesktop.org>2003-11-14 15:54:38 +0000
committerKaleb Keithley <kaleb@freedesktop.org>2003-11-14 15:54:38 +0000
commit981020ce68e4c8d9c0dafba631b0fd3328d7fc59 (patch)
treef275214d5531567e7efa08523a5b985bfbde887c
R6.6 is the Xorg base-lineXORG-MAIN
-rw-r--r--man/XAllowDeviceEvents.man149
-rw-r--r--man/XChangeDeviceDontPropagateList.man104
-rw-r--r--man/XChangeKeyboardDevice.man69
-rw-r--r--man/XChangePointerDevice.man79
-rw-r--r--man/XDeviceBell.man83
-rw-r--r--man/XGetDeviceControl.man149
-rw-r--r--man/XGetDeviceKeyMapping.man187
-rw-r--r--man/XGetDeviceModifierMapping.man145
-rw-r--r--man/XGetDeviceMotionEvents.man125
-rw-r--r--man/XGetExtensionVersion.man53
-rw-r--r--man/XGetFeedbackControl.man329
-rw-r--r--man/XGrabDevice.man207
-rw-r--r--man/XGrabDeviceButton.man217
-rw-r--r--man/XGrabDeviceKey.man231
-rw-r--r--man/XListInputDevices.man234
-rw-r--r--man/XOpenDevice.man128
-rw-r--r--man/XQueryDeviceState.man99
-rw-r--r--man/XSelectExtensionEvent.man148
-rw-r--r--man/XSendExtensionEvent.man149
-rw-r--r--man/XSetDeviceButtonMapping.man113
-rw-r--r--man/XSetDeviceFocus.man216
-rw-r--r--man/XSetDeviceMode.man69
-rw-r--r--man/XSetDeviceValuators.man79
-rw-r--r--src/XAllowDv.c86
-rw-r--r--src/XChgDCtl.c128
-rw-r--r--src/XChgFCtl.c205
-rw-r--r--src/XChgKMap.c92
-rw-r--r--src/XChgKbd.c86
-rw-r--r--src/XChgPnt.c90
-rw-r--r--src/XChgProp.c96
-rw-r--r--src/XCloseDev.c83
-rw-r--r--src/XDevBell.c87
-rw-r--r--src/XExtInt.c660
-rw-r--r--src/XExtToWire.c450
-rw-r--r--src/XFreeLst.c72
-rw-r--r--src/XGMotion.c140
-rw-r--r--src/XGetBMap.c105
-rw-r--r--src/XGetDCtl.c171
-rw-r--r--src/XGetFCtl.c271
-rw-r--r--src/XGetKMap.c118
-rw-r--r--src/XGetMMap.c102
-rw-r--r--src/XGetProp.c118
-rw-r--r--src/XGetVers.c108
-rw-r--r--src/XGrDvBut.c112
-rw-r--r--src/XGrDvKey.c115
-rw-r--r--src/XGrabDev.c107
-rw-r--r--src/XGtFocus.c90
-rw-r--r--src/XGtSelect.c144
-rw-r--r--src/XListDev.c257
-rw-r--r--src/XOpenDev.c111
-rw-r--r--src/XQueryDv.c196
-rw-r--r--src/XSelect.c92
-rw-r--r--src/XSetBMap.c91
-rw-r--r--src/XSetDVal.c98
-rw-r--r--src/XSetMMap.c89
-rw-r--r--src/XSetMode.c86
-rw-r--r--src/XSndExEv.c121
-rw-r--r--src/XStFocus.c85
-rw-r--r--src/XUngrDev.c84
-rw-r--r--src/XUngrDvB.c91
-rw-r--r--src/XUngrDvK.c91
61 files changed, 8690 insertions, 0 deletions
diff --git a/man/XAllowDeviceEvents.man b/man/XAllowDeviceEvents.man
new file mode 100644
index 0000000..bc954d8
--- /dev/null
+++ b/man/XAllowDeviceEvents.man
@@ -0,0 +1,149 @@
+.\"
+.\" Copyright ([\d,\s]*) by Hewlett-Packard Company, Ardent Computer,
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this documentation
+.\" for any purpose and without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\" Ardent, and Hewlett-Packard make no representations about the
+.\" suitability for any purpose of the information in this document. It is
+.\" provided \`\`as is'' without express or implied warranty.
+.\"
+.\" $Xorg: XAllDvEv.man,v 1.4 2001/03/16 17:51:13 pookie Exp $
+.ds xL Programming With Xlib
+.TH XAllowDeviceEvents 3X11 "Release 6.6" "X Version 11" "X FUNCTIONS"
+.SH NAME
+XAllowDeviceEvents \- release queued events
+.SH SYNTAX
+XAllowDeviceEvents\^(\^\fIdisplay\fP, \fIdevice\fP\^, \fIevent_mode\fP\^, \fItime\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ XDevice *\fIdevice\fP\^;
+.br
+ int \fIevent_mode\fP\^;
+.br
+ Time \fItime\fP\^;
+.SH ARGUMENTS
+.TP 12
+.I display
+Specifies the connection to the X server.
+.TP 12
+.I device
+Specifies the device from which events are to be allowed.
+.TP 12
+.I event_mode
+Specifies the event mode.
+You can pass
+\fIAsyncThisDevice\fP,
+\fISyncThisDevice\fP,
+\fIReplayThisDevice\fP,
+\fIAsyncOtherDevices\fP,
+\fISyncAll\fP,
+or
+\fIAsyncAll\fP.
+.TP 12
+.I time
+Specifies the time.
+You can pass either a timestamp or
+\fICurrentTime\fP.
+.SH DESCRIPTION
+The
+\fIXAllowDeviceEvents\fP
+function releases some queued events if the client has caused a device
+to freeze.
+It has no effect if the specified time is earlier than the last-grab
+time of the most recent active grab for the client and device,
+or if the specified time is later than the current X server time.
+.LP
+The following describes the processing that occurs depending on what
+constant you pass to the event_mode argument.
+.TP 12
+\fIAsyncThisDevice\fP
+If the specified device is frozen by the client, event processing for that
+device continues as usual. If the device is frozen multiple times by the client
+on behalf of multiple separate grabs, \fIAsyncThisDevice\fP thaws for all.
+\fIAsyncThisDevice\fP has no effect if the specified device is not frozen by
+the client, but the device need not be grabbed by the client.
+.TP 12
+\fISyncThisDevice\fP
+If the specified device is frozen and actively grabbed by the client, event
+processing for that device continues normally until the next key or button
+event is reported to the client. At this time, the specified device
+again appears to freeze. However, if the reported event causes the grab
+to be released, the specified device does not freeze. \fISyncThisDevice\fP
+has no effect if the specified device is not frozen by the client or is not
+grabbed by the client.
+.TP 12
+\fIReplayThisDevice\fP
+If the specified device is actively grabbed by the client and is frozen as
+the result of an event having been sent to the client (either from the
+activation of a GrabDeviceButton or from a previous AllowDeviceEvents with
+mode SyncThisDevice, but not from a GrabDevice), the grab is released and that
+event is completely reprocessed. This time, however, the request ignores
+any passive grabs at or above (toward the root) that the grab-window of the
+grab just released. The request has no effect if the specified device is
+not grabbed by the client or if it is not frozen as the result of an event.
+.TP 12
+\fIAsyncOtherDevices\fP
+If the remaining devices are frozen by the client, event processing for them
+continues as usual. If the other devices are frozen multiple times by the
+client on behalf of multiple grabs, \fIAsyncOtherDevices\fP "thaws" for
+all. \fIAsyncOtherDevices\fP has no effect if the devices are not frozen
+by the client.
+.TP 12
+\fISyncAll\fP
+If all devices are frozen by the client, event processing (for all devices)
+continues normally until the next button or key event is reported to the
+client for a grabbed device, at which time all devices again appear to freeze.
+However, if the reported event causes the grab to be released, then the devices
+do not freeze. If any device is still grabbed, then a subsequent event for it
+will still cause all devices to freeze. \fISyncAll\fP has no
+effect unless all devices are frozen by the client. If any device is
+frozen twice by the client on behalf of two separate grabs, \fISyncAll\fP thaws
+for both. A subsequent freeze for \fISyncAll\fP will only
+freeze each device once.
+.TP 12
+\fIAsyncAll\fP
+If all devices are frozen by the client, event processing for all devices
+continues normally. If any device is frozen multiple times by the client
+on behalf of multiple separate grabs, \fIAsyncAll\fP thaws for
+all. \fIAsyncAll\fP has no effect unless all devices are frozen by
+the client.
+.LP
+\fIAsyncThisDevice\fP,
+\fISyncThisDevice\fP,
+and
+\fIReplayThisDevice\fP
+have no effect on the processing of events from the remaining devices.
+\fIAsyncOtherDevices\fP
+has no effect on the processing of events from the specified device. When
+the event_mode is
+\fISyncAll\fP
+or
+\fIAsyncAll\fP,
+the device parameter is ignored.
+.LP
+It is possible for several grabs of different devices by the same or
+different clients to be active simultaneously. If a device is frozen on
+behalf of any grab, no event processing is performed for the device.
+It is possible for a single device to be frozen because of several grabs.
+In this case, the freeze must be released on behalf of each grab before
+events can again be processed.
+.LP
+\fIXAllowDeviceEvents\fP
+can generate a \fIBadDevice\fP or
+\fIBadValue\fP
+error.
+.SH DIAGNOSTICS
+.TP 12
+\fIBadDevice\fP
+An invalid device was specified. The specified device does not exist or has
+not been opened by this client via \fIXOpenInputDevice\fP. This error may
+also occur if the specified device is the X keyboard or X pointer device.
+.TP 12
+\fIBadValue\fP
+An invalid mode was specified on the request.
+.SH "SEE ALSO"
+XGrabDevice(3X11)
+.br
+\fI\*(xL\fP
diff --git a/man/XChangeDeviceDontPropagateList.man b/man/XChangeDeviceDontPropagateList.man
new file mode 100644
index 0000000..b3e854e
--- /dev/null
+++ b/man/XChangeDeviceDontPropagateList.man
@@ -0,0 +1,104 @@
+.\"
+.\" Copyright ([\d,\s]*) by Hewlett-Packard Company, Ardent Computer,
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this documentation
+.\" for any purpose and without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\" Ardent, and Hewlett-Packard make no representations about the
+.\" suitability for any purpose of the information in this document. It is
+.\" provided \`\`as is'' without express or implied warranty.
+.\"
+.\" $Xorg: XChProp.man,v 1.4 2001/03/16 17:51:13 pookie Exp $
+.ds xL Programming With Xlib
+.TH XChangeDeviceDontPropagateList 3X11 "Release 6.6" "X Version 11" "X FUNCTIONS"
+.SH NAME
+XChangeDeviceDontPropagateList, XGetDeviceDontPropagateList \- query or change the dont-propagate-list for extension devices
+.SH SYNTAX
+XChangeDeviceDontPropagateList\^(\^\fIdisplay\fP, \fIwindow\fP\^,
+\fIcount\fP\^, \fIevent_list\fP\^, \fImode\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window *\fIwindow\fP\^;
+.br
+ int *\fIcount\fP\^;
+.br
+ XEventClass *\fIevent_list\fP\^;
+.br
+ int \fImode\fP\^;
+.br
+XEventClass *XGetDeviceDontPropagateList\^(\^\fIdisplay\fP, \fIwindow\fP\^,
+\fIcount\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window *\fIwindow\fP\^;
+.br
+ int *\fIcount\fP\^;
+.SH ARGUMENTS
+.TP 12
+.I display
+Specifies the connection to the X server.
+.TP 12
+.I window
+Specifies the window whose dont-propagate-list is to be queried or modified.
+.TP 12
+.I event_list
+Specifies a pointer to a list of event classes.
+.TP 12
+.I mode
+Specifies the mode.
+You can pass
+\fIAddToList\fP ,
+or
+\fIDeleteFromList\fP.
+.TP 12
+.I count
+Specifies the number of event classes in the list.
+.SH DESCRIPTION
+The \fIXChangeDeviceDontPropagateList\fP request modifies the list
+of events that should not be propagated to ancestors of the event window.
+This request allows extension events to be added to or deleted from
+that list. By default, all events are propagated to ancestor windows.
+Once modified, the list remains modified for the life of the window.
+Events are not removed from the list because the client that added them
+has terminated.
+.LP
+Suppression of event propagation is not allowed for all input extension
+events. If a specified event class is one that cannot be suppressed,
+a \fIBadClass\fP error will result. Events that can be suppressed
+include \fIDeviceKeyPress\fP, \fIDeviceKeyRelease\fP, \fIDeviceButtonPress\fP,
+\fIDeviceButtonRelease\fP, \fIDeviceMotionNotify\fP, \fIProximityIn\fP,
+and \fIProximityOut\fP.
+.LP
+\fIXChangeDeviceDontPropagateList\fP
+can generate a \fIBadDevice\fP, \fIBadClass\fP, or \fIBadValue\fP error.
+.LP
+The \fIXGetDeviceDontPropagateList\fP request queries the list
+of events that should not be propagated to ancestors of the event window.
+.LP
+\fIXGetDeviceDontPropagateList\fP
+can generate a \fIBadClass\fP or \fIBadWindow\fP error.
+.SH DIAGNOSTICS
+.TP 12
+\fIBadDevice\fP
+An invalid device was specified. The specified device does not exist or has
+not been opened by this client via \fIXOpenInputDevice\fP. This error may
+also occur if some other client has caused the specified device to become
+the X keyboard or X pointer device via the \fIXChangeKeyboardDevice\fP or
+\fIXChangePointerDevice\fP requests.
+.TP 12
+\fIBadValue\fP
+Some numeric value falls outside the range of values accepted by the request.
+Unless a specific range is specified for an argument, the full range defined
+by the argument's type is accepted. Any argument defined as a set of
+alternatives can generate this error.
+.TP 12
+\fIBadWindow\fP
+An invalid window id was specified.
+.TP 12
+\fIBadClass\fP
+An invalid event class was specified.
+.SH "SEE ALSO"
+.br
+\fI\*(xL\fP
diff --git a/man/XChangeKeyboardDevice.man b/man/XChangeKeyboardDevice.man
new file mode 100644
index 0000000..53c2cf3
--- /dev/null
+++ b/man/XChangeKeyboardDevice.man
@@ -0,0 +1,69 @@
+.\"
+.\" Copyright ([\d,\s]*) by Hewlett-Packard Company, Ardent Computer,
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this documentation
+.\" for any purpose and without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\" Ardent, and Hewlett-Packard make no representations about the
+.\" suitability for any purpose of the information in this document. It is
+.\" provided \`\`as is'' without express or implied warranty.
+.\"
+.\" $Xorg: XChgKbd.man,v 1.4 2001/03/16 17:51:13 pookie Exp $
+.ds xL Programming With Xlib
+.TH XChangeKeyboardDevice 3X11 "Release 6.6" "X Version 11" "X FUNCTIONS"
+.SH NAME
+XChangeKeyboardDevice \- change which device is used as the X keyboard
+.SH SYNTAX
+Status XChangeKeyboardDevice\^(\^\fIdisplay\fP, \fIdevice\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ XDevice *\fIdevice\fP\^;
+.br
+.SH ARGUMENTS
+.TP 12
+.I display
+Specifies the connection to the X server.
+.TP 12
+.I device
+Specifies the device to be used as the X keyboard.
+.SH DESCRIPTION
+The \fIXChangeKeyboardDevice\fP request causes the server to use the specified
+device as the X keyboard. The device must have been previously opened by the
+requesting client via \fIXOpenDevice\fP or a \fIBadDevice\fP error will result.
+The device must support input class \fIKeys\fP, or a \fIBadMatch\fP error
+will result. If the server implementation does not support using the requested
+device as the X keyboard, a \fIBadDevice\fP error will result.
+.LP
+If the specified device is grabbed by another client, \fIAlreadyGrabbed\fP
+is returned. If the specified device is frozen by a grab on another device,
+\fIGrabFrozen\fP is returned.
+If the request is successful, \fISuccess\fP is returned.
+.LP
+If the request succeeds,
+a \fIChangeDeviceNotify\fP event is sent to all clients that have selected that
+event. A \fIMappingNotify\fP event with request = \fIMappingKeyboard\fP
+is sent to all clients.
+The specified device becomes the X keyboard and
+the old X keyboard becomes accessible through the input extension
+protocol requests.
+.LP
+\fIXChangeKeyboardDevice\fP can generate a \fIBadDevice\fP or a \fIBadMatch\fP
+error.
+.SH DIAGNOSTICS
+.TP 12
+\fIBadDevice\fP
+An invalid device was specified. The specified device does not exist, has
+not been opened by this client via \fIXOpenInputDevice\fP, or is already
+one of the core X device (pointer or keyboard). This error may
+also occur if
+the server implementation does not support using the specified device as
+the X keyboard.
+.TP 12
+\fIBadMatch\fP
+This error may occur if an \fIXChangeKeyboardDevice\fP request was made
+specifying a device that has no keys.
+.SH "SEE ALSO"
+XChangePointerDevice
+.br
+\fI\*(xL\fP
diff --git a/man/XChangePointerDevice.man b/man/XChangePointerDevice.man
new file mode 100644
index 0000000..6122c3b
--- /dev/null
+++ b/man/XChangePointerDevice.man
@@ -0,0 +1,79 @@
+.\"
+.\" Copyright ([\d,\s]*) by Hewlett-Packard Company, Ardent Computer,
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this documentation
+.\" for any purpose and without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\" Ardent, and Hewlett-Packard make no representations about the
+.\" suitability for any purpose of the information in this document. It is
+.\" provided \`\`as is'' without express or implied warranty.
+.\"
+.\" $Xorg: XChgPtr.man,v 1.4 2001/03/16 17:51:13 pookie Exp $
+.ds xL Programming With Xlib
+.TH XChangePointerDevice 3X11 "Release 6.6" "X Version 11" "X FUNCTIONS"
+.SH NAME
+XChangePointerDevice \- change which device is the X pointer
+.SH SYNTAX
+Status XChangePointerDevice\^(\^\fIdisplay\fP, \fIdevice\fP\^ \fIxaxis\fP\^, \fIyaxis\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ XDevice *\fIdevice\fP\^;
+.br
+ int \fIxaxis\fP\^;
+.br
+ int \fIyaxis\fP\^;
+.br
+.SH ARGUMENTS
+.TP 12
+.I display
+Specifies the connection to the X server.
+.TP 12
+.I device
+Specifies the device to be used as the X pointer.
+.TP 12
+.I xaxis
+Specifies the axis of the device to be used as the X pointer x-axis.
+.TP 12
+.I yaxis
+Specifies the axis of the device to be used as the X pointer y-axis.
+.SH DESCRIPTION
+The \fIXChangePointerDevice\fP request causes the server to use the specified
+device as the X pointer. The device must have been opened by the client via
+\fIXOpenDevice\fP or a \fIBadDevice\fP error will result. The device must
+support input class \fIValuators\fP or a \fIBadMatch\fP error will result.
+If the implementation does not support use of the specified device as the
+X pointer, a \fIBadDevice\fP error will result.
+.LP
+If the specified device is grabbed by another client, \fIAlreadyGrabbed\fP
+is returned. If the specified device is frozen by a grab on another device,
+\fIGrabFrozen\fP is returned.
+If the request is successful, \fISuccess\fP is returned.
+.LP
+If the request succeeds,
+a \fIChangeDeviceNotify\fP event is sent to all clients that have selected that
+event. A \fIMappingNotify\fP event with request = \fIMappingPointer\fP is
+sent to all clients.
+The specified device becomes the X pointer, and
+the old X pointer becomes accessible through the input extension
+protocol requests.
+.LP
+\fIXChangePointerDevice\fP can generate a \fIBadDevice\fP or a \fIBadMatch\fP
+error.
+.SH DIAGNOSTICS
+.TP 12
+\fIBadDevice\fP
+An invalid device was specified. The specified device does not exist, has
+not been opened by this client via \fIXOpenInputDevice\fP, or is already
+one of the core X input devices (pointer or keyboard). This error may also
+occur if the server implementation does not support using the specified
+device as the X pointer.
+.TP 12
+\fIBadMatch\fP
+This error may occur if an \fIXChangePointerDevice\fP request was made
+specifying a device that has less than two valuators, or specifying a
+valuator index beyond the range supported by the device.
+.SH "SEE ALSO"
+XChangeKeyboardDevice
+.br
+\fI\*(xL\fP
diff --git a/man/XDeviceBell.man b/man/XDeviceBell.man
new file mode 100644
index 0000000..5b44667
--- /dev/null
+++ b/man/XDeviceBell.man
@@ -0,0 +1,83 @@
+.\"
+.\" Copyright ([\d,\s]*) by Hewlett-Packard Company, Ardent Computer,
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this documentation
+.\" for any purpose and without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\" Ardent, and Hewlett-Packard make no representations about the
+.\" suitability for any purpose of the information in this document. It is
+.\" provided \`\`as is'' without express or implied warranty.
+.\"
+.\" $Xorg: XDevBell.man,v 1.4 2001/03/16 17:51:13 pookie Exp $
+.ds xL Programming With Xlib
+.TH XDeviceBell 3X11 "Release 6.6" "X Version 11" "X FUNCTIONS"
+.SH NAME
+XDeviceBell \- ring a bell on a device supported through the input extension
+.SH SYNTAX
+Status XDeviceBell\^(\^\fIdisplay\fP, \fIdevice\fP\^, \fIfeedbackclass\fP\^, \fIfeedbackid\fP\^, \fIpercent\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ XDevice *\fIdevice\fP\^;
+.br
+ XID *\fIfeedbackclass\fP\^;
+.br
+ XID *\fIfeedbackid\fP\^;
+.br
+ int *\fIpercent\fP\^;
+.br
+.SH ARGUMENTS
+.TP 12
+.I display
+Specifies the connection to the X server.
+.TP 12
+.I device
+Specifies the device with which the bell is associated.
+.TP 12
+.I feedbackclass
+Specifies the class of the feedback with which the bell is associated.
+.TP 12
+.I feedbackid
+Specifies the id of the feedback with which the bell is associated.
+.TP 12
+.I percent
+Specifies the volume in the range -100 to 100 at which the bell should be rung.
+.SH DESCRIPTION
+The \fIXDeviceBell\fP request causes the server to ring a bell on the
+specified feedback of the specified device, if possible.
+The specified volume is relative to the base volume for the bell.
+If an invalid device is specified,
+a \fIBadDevice\fP error will be returned. The feedbackclass and feedbackid
+parameters contain values returned by an \fIXGetFeedbackControl\fP request
+and uniquely identify the bell to ring. If a feedbackclass is specified that
+does not support a bell, or if a nonexistent feedbackid is specified,
+or a percent value is specified that is not in the range -100 to 100,
+a \fIBadValue\fP error will be returned.
+.LP
+The volume at which the bell is rung when the percent argument is
+nonnegative is:
+.IP
+base \- [(base * percent) / 100] + percent
+.LP
+The volume at which the bell rings
+when the percent argument is negative is:
+.IP
+base + [(base * percent) / 100]
+.LP
+To change the base volume of the bell, use \fIXChangeFeedbackControl\fP.
+.LP
+\fIXDeviceBell\fP can generate a \fIBadDevice\fP or a \fIBadValue\fP
+error.
+.SH DIAGNOSTICS
+.TP 12
+\fIBadDevice\fP
+An invalid device was specified. The specified device does not exist, or has
+not been opened by this client via \fIXOpenInputDevice\fP.
+.TP 12
+\fIBadValue\fP
+An invalid feedbackclass, feedbackid, or percent value was specified.
+.SH "SEE ALSO"
+XChangeFeedbackControl(3X),
+XBell(3X)
+.br
+\fI\*(xL\fP
diff --git a/man/XGetDeviceControl.man b/man/XGetDeviceControl.man
new file mode 100644
index 0000000..ecae869
--- /dev/null
+++ b/man/XGetDeviceControl.man
@@ -0,0 +1,149 @@
+.\"
+.\" Copyright ([\d,\s]*) by Hewlett-Packard Company, Ardent Computer,
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this documentation
+.\" for any purpose and without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\" Ardent, and Hewlett-Packard make no representations about the
+.\" suitability for any purpose of the information in this document. It is
+.\" provided \`\`as is'' without express or implied warranty.
+.\"
+.\" $Xorg: XChDCtl.man,v 1.4 2001/03/16 17:51:13 pookie Exp $
+.ds xL Programming With Xlib
+.TH XGetDeviceControl 3X11 "Release 6.6" "X Version 11" "X FUNCTIONS"
+.SH NAME
+XGetDeviceControl, XChangeDeviceControl \- query and change input device controls
+.SH SYNTAX
+XDeviceControl *
+XGetDeviceControl\^(\^\fIdisplay\fP, \fIdevice\fP\^, \fIcontrol\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ XDevice *\fIdevice\fP\^;
+.br
+ int *\fIcontrolType\fP\^;
+.br
+.sp
+int XChangeDeviceControl\^(\^\fIdisplay\fP, \fIdevice\fP\^, \fIcontrolType\fP\^, \fIcontrol\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ XDevice *\fIdevice\fP\^;
+.br
+ int \fIcontrolType\fP\^;
+.br
+ XDeviceControl *\fIcontrol\fP\^;
+.SH ARGUMENTS
+.TP 15
+.I display
+Specifies the connection to the X server.
+.TP 15
+.I device
+Specifies the device whose control is to be interrogated or modified.
+.TP 15
+.I controlType
+Specifies the type of control to be interrogated or changed.
+.TP 15
+.I control
+Specifies the address of an \fIXDeviceControl\fP structure that contains
+the new values for the Device.
+.SH DESCRIPTION
+These requests are provided to manipulate those input devices that
+support device control. A \fIBadMatch\fP error will be generated if the
+requested device does not support any device controls.
+.LP
+Valid device control types that can be used with these requests include the
+following:
+.TP 20
+DEVICE_RESOLUTION
+Queries or changes the resolution of valuators on input devices.
+.LP
+The \fIXGetDeviceControl\fP request returns a pointer to an
+\fIXDeviceControl\fP structure.
+.LP
+\fIXGetDeviceControl\fP can generate a \fIBadDevice\fP or
+\fIBadMatch\fP error.
+.LP
+The \fIXChangeDeviceControl\fP request modifies the values of one
+control on the specified device. The control is identified by the id
+field of the \fIXDeviceControl\fP structure that is passed with the
+request.
+.LP
+\fIXChangeDeviceControl\fP can generate a \fIBadDevice\fP,
+\fIBadMatch\fP, or \fIBadValue\fP error.
+.SH STRUCTURES
+Each control is described by a structure specific to that control.
+These structures are defined in the file \fIXInput.h\fP.
+.LP
+\fIXDeviceControl\fP is a generic
+structure that contains two fields that are at the beginning of each class
+of control:
+.LP
+.DS
+.nf
+typedef struct {
+.br
+ XID class;
+.br
+ int length;
+.br
+} XDeviceControl;
+.fi
+.DE
+.LP
+The \fIXDeviceResolutionState\fP structure defines the information that is
+returned for device resolution for devices with valuators.
+.LP
+.DS
+.nf
+typedef struct {
+ XID control;
+ int length;
+ int num_valuators;
+ int *resolutions;
+ int *min_resolutions;
+ int *max_resolutions;
+} XDeviceResolutionState;
+.fi
+.DE
+.LP
+The \fIXDeviceResolutionControl\fP structure defines the attributes that can be
+controlled for keyboard Devices.
+.LP
+.DS
+.nf
+typedef struct {
+ XID control;
+ int length;
+ int first_valuator;
+ int num_valuators;
+ int *resolutions;
+} XDeviceResolutionControl;
+.fi
+.DE
+.SH DIAGNOSTICS
+.TP 12
+\fIBadDevice\fP
+An invalid device was specified. The specified device does not exist or has
+not been opened by this client via \fIXOpenInputDevice\fP. This error may
+also occur if some other client has caused the specified device to become
+the X keyboard or X pointer device via the \fIXChangeKeyboardDevice\fP or
+\fIXChangePointerDevice\fP requests.
+.TP 12
+\fIBadMatch\fP
+This error may occur if an \fIXGetDeviceControl\fP request was made specifying
+a device that has no controls or an \fIXChangeDeviceControl\fP request was
+made with an \fIXDeviceControl\fP structure that contains an invalid Device
+type. It may also occur if an invalid combination of mask bits is specified
+(\fIDvKey\fP but no \fIDvAutoRepeatMode\fP for keyboard Devices), or if an
+invalid KeySym is specified for a string Device.
+.TP 12
+\fIBadValue\fP
+Some numeric value falls outside the range of values accepted by the
+\fIXChangeDeviceControl\fP request.
+Unless a specific range is specified for an argument, the full range defined
+by the argument's type is accepted. Any argument defined as a set of
+alternatives can generate this error.
+.SH "SEE ALSO"
+.br
+\fI\*(xL\fP
diff --git a/man/XGetDeviceKeyMapping.man b/man/XGetDeviceKeyMapping.man
new file mode 100644
index 0000000..ba52b7c
--- /dev/null
+++ b/man/XGetDeviceKeyMapping.man
@@ -0,0 +1,187 @@
+.\"
+.\" Copyright ([\d,\s]*) by Hewlett-Packard Company, Ardent Computer,
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this documentation
+.\" for any purpose and without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\" Ardent, and Hewlett-Packard make no representations about the
+.\" suitability for any purpose of the information in this document. It is
+.\" provided \`\`as is'' without express or implied warranty.
+.\"
+.\" $Xorg: XChKMap.man,v 1.4 2001/03/16 17:51:13 pookie Exp $
+.ds xL Programming with Xlib
+.TH XGetDeviceKeyMapping 3X11 "Release 6.6" "X Version 11" "X FUNCTIONS"
+.SH NAME
+XGetDeviceKeyMapping, XChangeDeviceKeyMapping \- query or change device key mappings
+.SH SYNTAX
+\fB
+XChangeDeviceKeyMapping(\^\fIdisplay\fP, \fIdevice\fP, \fIfirst_keycode\fP,
+\fIkeysyms_per_keycode\fP, \fIkeysyms\fP, \fIkeycode_count\fP\^)
+.nf
+ Display *\fIdisplay\fP\^;
+ XDevice *\fIdevice\fP\^;
+ int \fIfirst_keycode\fP\^;
+ int \fIkeysyms_per_keycode\fP\^;
+ KeySym *\fIkeysyms\fP\^;
+ int \fIkeycode_count\fP\^;
+
+KeySym *XGetDeviceKeyMapping(\^\fIdisplay\fP, \fIdevice\fP, \fIfirst_keycode\fP, \fIkeycode_count\fP,
+\fIkeysyms_per_keycode_return\fP\^)
+ Display *\fIdisplay\fP\^;
+ XDevice *\fIdevice\fP\^;
+ KeyCode \fIfirst_keycode\fP\^;
+ int \fIkeycode_count\fP\^;
+ int *\fIkeysyms_per_keycode_return\fP\^;
+.fi
+\fP
+.SH ARGUMENTS
+.TP 12
+.I display
+Specifies the connection to the X server.
+.TP 12
+.I device
+Specifies the device whose key mapping is to be queried or modified.
+.TP 12
+.I first_keycode
+Specifies the first KeyCode to be returned.
+.TP 12
+.I keycode_count
+Specifies the number of KeyCodes to be returned or modified.
+.TP 12
+.I keysyms_per_keycode
+Specifies the number of KeySyms per KeyCode.
+.TP 12
+.I keysyms_per_keycode_return
+Specifies the address of a variable into which the number of KeySyms per KeyCode
+will be returned.
+.TP 12
+.I keysyms
+Specifies the address of an array of KeySyms.
+.SH DESCRIPTION
+For the specified device,
+the \fIXGetDeviceKeyMapping\fP request returns
+the symbols for the specified number of KeyCodes
+starting with first_keycode.
+The value specified in first_keycode must be greater than
+or equal to min_keycode as returned by
+\fIXListInputDevices\fP,
+or a
+\fIBadValue\fP
+error results.
+In addition, the following expression must be less than or equal
+to max_keycode as returned by
+\fIXListInputDevices\fP:
+.LP
+.DS
+first_keycode + keycode_count \- 1
+.DE
+.LP
+If this is not the case, a
+\fIBadValue\fP
+error results.
+The number of elements in the KeySyms list is:
+.LP
+.DS
+keycode_count * keysyms_per_keycode_return
+.DE
+.LP
+KeySym number N, counting from zero, for KeyCode K has the following index
+in the list, counting from zero:
+.DS
+(K \- first_code) * keysyms_per_code_return + N
+.DE
+.LP
+The X server arbitrarily chooses the keysyms_per_keycode_return value
+to be large enough to report all requested symbols.
+A special KeySym value of
+\fINoSymbol\fP
+is used to fill in unused elements for
+individual KeyCodes.
+To free the storage returned by
+\fIXGetDeviceKeyMapping\fP,
+use
+\fIXFree\fP.
+.LP
+If the specified device does not support input class keys, a \fIBadMatch\fP
+error will result.
+.LP
+\fIXGetDeviceKeyMapping\fP
+can generate a \fIBadDevice\fP, \fIBadMatch\fP, or \fIBadValue\fP
+error.
+.LP
+For the specified device, the \fIXChangeDeviceKeyMapping\fP
+request defines the symbols for the specified number of KeyCodes
+starting with first_keycode.
+The symbols for KeyCodes outside this range remain unchanged.
+The number of elements in keysyms must be:
+.LP
+.DS
+num_codes * keysyms_per_keycode
+.DE
+.LP
+The specified first_keycode must be greater than or equal to min_keycode
+returned by \fIXListInputDevices\fP, or a \fIBadValue\fP error results.
+In addition, the following expression must be less than or equal to
+max_keycode as returned by
+\fIXListInputDevices\fP, or a \fIBadValue\fP error results:
+.LP
+.DS
+first_keycode + num_codes \- 1
+.DE
+.LP
+KeySym number N, counting from zero, for KeyCode K has the following index
+in keysyms, counting from zero:
+.LP
+.DS
+(K \- first_keycode) * keysyms_per_keycode + N
+.DE
+.LP
+The specified keysyms_per_keycode can be chosen arbitrarily by the client
+to be large enough to hold all desired symbols.
+A special KeySym value of
+\fINoSymbol\fP
+should be used to fill in unused elements
+for individual KeyCodes.
+It is legal for
+\fINoSymbol\fP
+to appear in nontrailing positions
+of the effective list for a KeyCode.
+\fIXChangeDeviceKeyMapping\fP generates a \fIDeviceMappingNotify\fP
+event that is sent to all clients that have selected that type of event.
+.LP
+There is no requirement that the X server interpret this mapping.
+It is merely stored for reading and writing by clients.
+.LP
+If the specified device does not support input class keys, a \fIBadMatch\fP
+error results.
+.LP
+\fIXChangeDeviceKeyMapping\fP can generate a \fIBadDevice\fP,
+\fIBadMatch\fP, \fIBadAlloc\fP, or \fIBadValue\fP error.
+.LP
+.SH DIAGNOSTICS
+.TP 12
+\fIBadDevice\fP
+An invalid device was specified. The specified device does not exist or has
+not been opened by this client via \fIXOpenInputDevice\fP. This error may
+also occur if the specified device is the X keyboard or X pointer device.
+.TP 12
+\fIBadMatch\fP
+This error may occur if an \fIXGetDeviceKeyMapping\fP or
+\fIXChangeDeviceKeyMapping\fP request was made
+specifying
+a device that has no keys.
+.TP 12
+\fIBadValue\fP
+Some numeric value falls outside the range of values accepted by the request.
+Unless a specific range is specified for an argument, the full range defined
+by the argument's type is accepted. Any argument defined as a set of
+alternatives can generate this error.
+.TP 12
+\fIBadAlloc\fP
+The server failed to allocate the requested resource or server memory.
+.SH "SEE ALSO"
+XSetDeviceButtonMapping(3X11)
+.br
+XSetDeviceModifierMapping(3X11)
+.br
+\fI\*(xL\fP
diff --git a/man/XGetDeviceModifierMapping.man b/man/XGetDeviceModifierMapping.man
new file mode 100644
index 0000000..0175d83
--- /dev/null
+++ b/man/XGetDeviceModifierMapping.man
@@ -0,0 +1,145 @@
+.\"
+.\" Copyright ([\d,\s]*) by Hewlett-Packard Company, Ardent Computer,
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this documentation
+.\" for any purpose and without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\" Ardent, and Hewlett-Packard make no representations about the
+.\" suitability for any purpose of the information in this document. It is
+.\" provided \`\`as is'' without express or implied warranty.
+.\"
+.\" $Xorg: XChMMap.man,v 1.4 2001/03/16 17:51:13 pookie Exp $
+.ds xL Programming With Xlib
+.TH XGetDeviceModifierMapping 3X11 "Release 6.6" "X Version 11" "X FUNCTIONS"
+.SH NAME
+XGetDeviceModifierMapping, XSetDeviceModifierMapping \- query or change device modifier mappings
+.SH SYNTAX
+\fB
+XSetDeviceModifierMapping(\^\fIdisplay\fP, \fIdevice\fP, \fImodmap\fP\^)
+.nf
+ Display *\fIdisplay\fP\^;
+ XDevice *\fIdevice\fP\^;
+ XModifierKeymap *\fImodmap\fP\^;
+
+XModifierKeymap *XGetDeviceModifierMapping(\^\fIdisplay\fP, \fIdevice\fP\^)
+ Display *\fIdisplay\fP\^;
+ XDevice *\fIdevice\fP\^;
+.fi
+\fP
+.SH ARGUMENTS
+.TP 12
+.I display
+Specifies the connection to the X server.
+.TP 12
+.I device
+Specifies the device whose modifier mapping is to be queried or modified.
+.TP 12
+.I modmap
+Specifies a pointer to the \fIXModifierKeymap\fP structure.
+.SH DESCRIPTION
+The \fIXSetDeviceModifierMapping\fP
+request specifies the KeyCodes of the keys (if any) that are to be used
+as modifiers for the specified device.
+If it succeeds, the X server generates a \fIDeviceMappingNotify\fP
+event, and \fIXSetDeviceModifierMapping\fP returns \fIMappingSuccess\fP.
+X permits at most eight modifier keys.
+If more than eight are specified in the
+\fIXModifierKeymap\fP structure, a \fIBadLength\fP
+error results.
+.LP
+The modifiermap member of the \fIXModifierKeymap\fP
+structure contains eight sets of max_keypermod KeyCodes,
+one for each modifier in the order
+\fIShift\fP,
+\fILock\fP,
+\fIControl\fP,
+\fIMod1\fP,
+\fIMod2\fP,
+\fIMod3\fP,
+\fIMod4\fP,
+and
+\fIMod5\fP.
+Only nonzero KeyCodes have meaning in each set,
+and zero KeyCodes are ignored.
+In addition, all of the nonzero KeyCodes must be in the range specified by
+min_keycode and max_keycode as returned by
+\fIXListInputDevices\fP, or a \fIBadValue\fP
+error results.
+No KeyCode may appear twice in the entire map,
+or a
+\fIBadValue\fP
+error results.
+.LP
+An X server can impose restrictions on how modifiers can be changed,
+for example,
+if certain keys do not generate up transitions in hardware,
+if auto-repeat cannot be disabled on certain keys,
+or if multiple modifier keys are not supported.
+If some such restriction is violated,
+the status reply is
+\fIMappingFailed\fP,
+and none of the modifiers are changed.
+If the new KeyCodes specified for a modifier differ from those
+currently defined and any (current or new) keys for that modifier are
+in the logically down state,
+\fIXSetDeviceModifierMapping\fP
+returns \fIMappingBusy\fP,
+and none of the modifiers is changed.
+.LP
+\fIXSetDeviceModifierMapping\fP
+can generate \fIBadLength\P, \fIBadDevice\fP, \fIBadMatch\fP, \fIBadAlloc\fP,
+and \fIBadValue\fP errors.
+.LP
+The
+\fIXGetDeviceModifierMapping\fP
+request returns a pointer to a newly created
+\fIXModifierKeymap\fP
+structure that contains the keys being used as modifiers.
+The structure should be freed after use by calling
+\fIXFreeModifierMapping \fP.
+If only zero values appear in the set for any modifier,
+that modifier is disabled.
+.LP
+\fIXGetDeviceModifierMapping\fP
+can generate \fIBadDevice\fP and \fIBadMatch\fP errors.
+.SH STRUCTURES
+The \fIXModifierKeymap\fP structure contains:
+.LP
+.nf
+typedef struct {
+ int max_keypermod;
+ KeyCode *modifiermap;
+} XModifierKeymap;
+.fi
+.LP
+.SH DIAGNOSTICS
+.TP 12
+\fIBadLength\fP
+More than eight keys were specified in the
+\fIXModifierKeymap\fP structure.
+.TP 12
+\fIBadAlloc\fP
+The server failed to allocate the requested resource or server memory.
+.TP 12
+\fIBadDevice\fP
+An invalid device was specified. The specified device does not exist or has
+not been opened by this client via \fIXOpenInputDevice\fP. This error may
+also occur if the specified device is the X keyboard or X pointer device.
+.TP 12
+\fIBadMatch\fP
+This error may occur if an \fIXGetDeviceModifierMapping\fP
+or \fIXChangeDeviceModifierMapping\fP request was made
+specifying
+a device that has no keys.
+.TP 12
+\fIBadValue\fP
+Some numeric value falls outside the range of values accepted by the request.
+Unless a specific range is specified for an argument, the full range defined
+by the argument's type is accepted. Any argument defined as a set of
+alternatives can generate this error.
+.SH "SEE ALSO"
+XSetDeviceKeyMapping(3X11)
+.br
+XSetDeviceButtonMapping(3X11)
+.br
+\fI\*(xL\fP
diff --git a/man/XGetDeviceMotionEvents.man b/man/XGetDeviceMotionEvents.man
new file mode 100644
index 0000000..cf8d732
--- /dev/null
+++ b/man/XGetDeviceMotionEvents.man
@@ -0,0 +1,125 @@
+.\"
+.\" Copyright ([\d,\s]*) by Hewlett-Packard Company, Ardent Computer,
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this documentation
+.\" for any purpose and without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\" Ardent, and Hewlett-Packard make no representations about the
+.\" suitability for any purpose of the information in this document. It is
+.\" provided \`\`as is'' without express or implied warranty.
+.\"
+.\" $Xorg: XGetDvMo.man,v 1.4 2001/03/16 17:51:13 pookie Exp $
+.ds xL Programming with Xlib
+.TH XGetDeviceMotionEvents 3X11 "Release 6.6" "X Version 11" "X FUNCTIONS"
+.SH NAME
+XGetDeviceMotionEvents, XDeviceTimeCoord \- get device motion history
+.SH SYNTAX
+XDeviceTimeCoord *XGetDeviceMotionEvents\^(\fIdisplay\fP\^, \fIdevice\fP\^,
+\fIstart\fP\^, \fIstop\fP\^,
+.br
+\fInevents_return\fP\^, \fImode_return\fP\^, \fIaxis_count_return\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ XDevice *\fIdevice\fP\^;
+.br
+ Time \fIstart\fP\^, \fIstop\fP\^;
+.br
+ int *\fInevents_return\fP\^;
+.br
+ int *\fImode_return\fP\^;
+.br
+ int *\fIaxis_count_return\fP\^;
+.SH ARGUMENTS
+.TP 12
+.I display
+Specifies the connection to the X server.
+.TP 12
+.I device
+Specifies the device whose motion history is to be queried.
+.TP 12
+.I start
+.br
+.ns
+.TP 12
+.I stop
+Specify the time interval in which the events are returned from the motion
+history buffer.
+You can pass a timestamp or \fICurrentTime\fP.
+.TP 12
+.I nevents_return
+Returns the number of events from the motion history buffer.
+.TP 12
+.I mode_return
+Returns the mode of the device (\fIAbsolute\fP or \fIRelative\fP).
+.TP 12
+.I axis_count_return
+Returns the count of axes being reported.
+.SH DESCRIPTION
+The server may retain the recent history of the device motion
+and do so to a finer granularity than is reported by
+\fIDeviceMotionNotify\fP
+events.
+The \fIXGetDeviceMotionEvents\fP request makes this history available.
+.LP
+The
+\fIXGetDeviceMotionEvents\fP
+request returns all events in the motion history buffer that fall between the
+specified start and stop times, inclusive.
+If the start time is later than the stop time or if the start time is in the
+future, no events are returned.
+If the stop time is in the future, it is equivalent to specifying
+\fICurrentTime\fP.
+.LP
+The \fImode\fP indicates whether the device is reporting absolute positional
+data (mode=\fIAbsolute\fP) or relative motion data (mode=\fIRelative\fP).
+Some devices allow their mode to be changed via the \fIXSetDeviceMode\fP
+request.
+These constants are defined in the file XI.h. The \fIaxis_count\fP
+returns the number of axes or valuators being reported by the device.
+.LP
+\fIXGetDeviceMotionEvents\fP can generate a \fIBadDevice\fP, or \fIBadMatch\fP
+error.
+.SH STRUCTURES
+The
+\fIXDeviceTimeCoord\fP
+structure contains:
+.LP
+.nf
+typedef struct {
+ Time time;
+ int *data;
+} XDeviceTimeCoord;
+.fi
+.LP
+The time member is set to the time, in milliseconds.
+The data member is a pointer to an array of integers.
+These integers are set to the values of each valuator or
+axis reported by the device. There is one element in the array
+per axis of motion reported by the device. The value of the array elements
+depends on the mode of the device. If the mode is \fIAbsolute\fP, the
+values are the raw values generated by the device. These may be scaled by
+client programs using the maximum values that the device can generate. The
+maximum value for each axis of the device is reported in the max_val
+field of the \fIXAxisInfo\fP returned by the \fIXListInputDevices\fP
+request. If the mode is \fIRelative\fP, the data values are the relative
+values generated by the device.
+.LP
+You should use \fIXFreeDeviceMotionEvents\fP to free the data returned by
+this request.
+.LP
+Errors returned by this request: \fIBadDevice\fP, \fIBadMatch\fP.
+.SH DIAGNOSTICS
+.TP 12
+\fIBadDevice\fP
+An invalid device was specified. The specified device does not exist or has
+not been opened by this client via \fIXOpenInputDevice\fP. This error may
+also occur if the specified device is the X keyboard or X pointer device.
+.TP 12
+\fIBadMatch\fP
+This error may occur if an \fIXGetDeviceMotionEvents\fP request is made
+specifying
+a device that has no valuators and reports no axes of motion.
+.SH "SEE ALSO"
+.br
+\fI\*(xL\fP
diff --git a/man/XGetExtensionVersion.man b/man/XGetExtensionVersion.man
new file mode 100644
index 0000000..29f7acf
--- /dev/null
+++ b/man/XGetExtensionVersion.man
@@ -0,0 +1,53 @@
+.\"
+.\" Copyright ([\d,\s]*) by Hewlett-Packard Company, Ardent Computer,
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this documentation
+.\" for any purpose and without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\" Ardent, and Hewlett-Packard make no representations about the
+.\" suitability for any purpose of the information in this document. It is
+.\" provided \`\`as is'' without express or implied warranty.
+.\"
+.\" $Xorg: XGetExtV.man,v 1.4 2001/03/16 17:51:13 pookie Exp $
+.ds xL Programming With Xlib
+.TH XGetExtensionVersion 3X11 "Release 6.6" "X Version 11" "X FUNCTIONS"
+.SH NAME
+XGetExtensionVersion \- query the version of the input extension.
+.SH SYNTAX
+XExtensionVersion *XGetExtensionVersion\^(\^\fIdisplay\fP, \fIname\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ char *\fIname\fP\^;
+.SH ARGUMENTS
+.TP 12
+.I display
+Specifies the connection to the X server.
+.TP 12
+.I name
+Specifies the extension to be queried. The input extension name is defined
+in the header file \fIXI.h\fP.
+.SH DESCRIPTION
+The \fIXGetExtensionVersion\fP request queries the version of the input
+extension, and returns an \fIXExtensionVersion\fP structure. This structure
+contains a major_version and minor_version number which can be compared
+with constants defined in \fIXI.h\fP. Support for additional protocol
+requests added to the input extension after its initial release is indicated
+by a version number corresponding to the added requests. Each version
+contains all the protocol requests contained by previous versions.
+.LP
+You should use \fIXFree\fP to free the \fIXExtensionVersion\fP structure.
+.SH STRUCTURES
+This request returns an XExtensionVersion structure.
+.DS
+typedef struct {
+ int present;
+ short major_version;
+ short minor_version;
+} XExtensionVersion;
+.DE
+.SH DIAGNOSTICS
+none
+.SH "SEE ALSO"
+.br
+\fI\*(xL\fP
diff --git a/man/XGetFeedbackControl.man b/man/XGetFeedbackControl.man
new file mode 100644
index 0000000..959052a
--- /dev/null
+++ b/man/XGetFeedbackControl.man
@@ -0,0 +1,329 @@
+.\"
+.\" Copyright ([\d,\s]*) by Hewlett-Packard Company, Ardent Computer,
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this documentation
+.\" for any purpose and without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\" Ardent, and Hewlett-Packard make no representations about the
+.\" suitability for any purpose of the information in this document. It is
+.\" provided \`\`as is'' without express or implied warranty.
+.\"
+.\" $Xorg: XChFCtl.man,v 1.4 2001/03/16 17:51:13 pookie Exp $
+.ds xL Programming With Xlib
+.TH XGetFeedbackControl 3X11 "Release 6.6" "X Version 11" "X FUNCTIONS"
+.SH NAME
+XGetFeedbackControl, XChangeFeedbackControl \- query and change input device feedbacks
+.SH SYNTAX
+XFeedbackState *
+XGetFeedbackControl\^(\^\fIdisplay\fP, \fIdevice\fP\^, \fInum_feedbacks\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ XDevice *\fIdevice\fP\^;
+.br
+ int *\fInum_feedbacks\fP\^;
+.br
+.sp
+int XChangeFeedbackControl\^(\^\fIdisplay\fP, \fIdevice\fP\^, \fImask\fP\^, \fIcontrol\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ XDevice *\fIdevice\fP\^;
+.br
+ Mask \fImask\fP\^;
+.br
+ XFeedbackControl *\fIcontrol\fP\^;
+.SH ARGUMENTS
+.TP 15
+.I display
+Specifies the connection to the X server.
+.TP 15
+.I device
+Specifies the device whose feedbacks are to be queried or modified.
+.TP 15
+.I num_feedbacks
+Specifies an address into which the number of feedbacks supported by the
+device is to be returned.
+.TP 15
+.I mask
+Specifies a mask specific to each type of feedback that describes how
+the feedback is to be modified.
+.TP 15
+.I control
+Specifies the address of an \fIXFeedbackControl\fP structure that contains
+the new values for the feedback.
+.SH DESCRIPTION
+These requests are provided to manipulate those input devices that
+support feedbacks. A \fIBadMatch\fP error will be generated if the
+requested device does not support feedbacks. Whether or not a given
+device supports feedbacks can be determined by examining the information
+returned by the \fIXOpenDevice\fP request. For those devices that
+support feedbacks, \fIXOpenDevice\fP will return an
+\fIXInputClassInfo\fP structure with the input_class field
+equal to the constant \fIFeedbackClass\fP (defined in the file \fIXI.h\fP).
+.LP
+The \fIXGetFeedbackControl\fP request returns a pointer to a list of
+\fIXFeedbackState\fP structures. Each item in this list describes one
+of the feedbacks supported by the device. The items are variable length,
+so each contains its length to allow traversal to the next item in the
+list.
+.LP
+The feedback classes that are currently defined are: \fIKbdFeedbackClass\fP,
+\fIPtrFeedbackClass\fP, \fIStringFeedbackClass\fP, \fIIntegerFeedbackClass\fP,
+\fILedFeedbackClass\fP, and \fIBellFeedbackClass\fP. These constants are
+defined in the file \fIXI.h\fP. An input device may
+support zero or more classes of feedback, and may support multiple feedbacks
+of the same class. Each feedback contains a class identifier and an id
+that is unique within that class for that input device. The id is used
+to identify the feedback when making an \fIXChangeFeedbackControl\fP request.
+.LP
+\fIXGetFeedbackControl\fP can generate a \fIBadDevice\fP or
+\fIBadMatch\fP error.
+.LP
+The \fIXChangeFeedbackControl\fP request modifies the values of one
+feedback on the specified device. The feedback is identified by the id
+field of the \fIXFeedbackControl\fP structure that is passed with the
+request. The fields of the feedback that are to be modified are identified
+by the bits of the mask that is passed with the request.
+.LP
+\fIXChangeFeedbackControl\fP can generate a \fIBadDevice\fP,
+\fIBadMatch\fP, or \fIBadValue\fP error.
+.SH STRUCTURES
+Each class of feedback is described by a structure specific to that class.
+These structures are defined in the file \fIXInput.h\fP.
+\fIXFeedbackState\fP and \fIXFeedbackControl\fP are generic
+structures that contain three fields that are at the beginning of each class
+of feedback:
+.LP
+.DS
+typedef struct {
+.br
+ XID class;
+.br
+ int length;
+.br
+ XID id;
+.br
+} XFeedbackState, XFeedbackControl;
+.DE
+.LP
+The \fIXKbdFeedbackState\fP structure defines the attributes that are
+returned for feedbacks equivalent to those on the X keyboard.
+.LP
+.DS
+.nf
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int click;
+ int percent;
+ int pitch;
+ int duration;
+ int led_mask;
+ int global_auto_repeat;
+ char auto_repeats[32];
+} XKbdFeedbackState;
+.fi
+.DE
+.LP
+The \fIXPtrFeedbackState\fP structure defines the attributes that are
+returned for feedbacks equivalent to those on the the X pointer.
+.LP
+.DS
+.nf
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int accelNum;
+ int accelDenom;
+ int threshold;
+} XPtrFeedbackState;
+.fi
+.DE
+.LP
+The \fIXIntegerFeedbackState\fP structure defines attributes that are
+returned for integer feedbacks.
+.LP
+.DS
+.nf
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int resolution;
+ int minVal;
+ int maxVal;
+} XIntegerFeedbackState;
+.fi
+.DE
+.LP
+The \fIXStringFeedbackState\fP structure defines the attributes that are
+returned for string feedbacks.
+.LP
+.DS
+.nf
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int max_symbols;
+ int num_syms_supported;
+ KeySym *syms_supported;
+} XStringFeedbackState;
+.fi
+.DE
+.LP
+The \fIXBellFeedbackState\fP structure defines the attributes that are
+returned for bell feedbacks.
+.LP
+.DS
+.nf
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int percent;
+ int pitch;
+ int duration;
+} XBellFeedbackState;
+.fi
+.DE
+.LP
+The \fIXLedFeedbackState\fP structure defines the attributes that are
+returned for LED feedbacks.
+.LP
+.DS
+.nf
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int led_values;
+} XLedFeedbackState;
+.fi
+.DE
+.LP
+The \fIXPrtFeedbackControl\fP structure defines the attributes that can be
+controlled for pointer feedbacks.
+.LP
+.DS
+.nf
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int accelNum;
+ int accelDenom;
+ int threshold;
+} XPtrFeedbackControl;
+.fi
+.DE
+.LP
+The \fIXKbdFeedbackControl\fP structure defines the attributes that can be
+controlled for keyboard feedbacks.
+.LP
+.DS
+.nf
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int click;
+ int percent;
+ int pitch;
+ int duration;
+ int led_mask;
+ int led_value;
+ int key;
+ int auto_repeat_mode;
+} XKbdFeedbackControl;
+.fi
+.DE
+.LP
+The \fIXStringFeedbackControl\fP structure defines the attributes that can be
+controlled for string feedbacks.
+.LP
+.DS
+.nf
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int num_keysyms;
+ KeySym *syms_to_display;
+} XStringFeedbackControl;
+.fi
+.DE
+.LP
+The \fIXIntegerFeedbackControl\fP structure defines the attributes that can
+be controlled for integer feedbacks.
+.LP
+.DS
+.nf
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int int_to_display;
+} XIntegerFeedbackControl;
+.fi
+.DE
+.LP
+The \fIXBellFeedbackControl\fP structure defines the attributes that can be
+controlled for bell feedbacks.
+.LP
+.DS
+.nf
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int percent;
+ int pitch;
+ int duration;
+} XBellFeedbackControl;
+.fi
+.DE
+.LP
+The \fIXLedFeedbackControl\fP structure defines the attributes that can be
+controlled for LED feedbacks.
+.LP
+.DS
+.nf
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int led_mask;
+ int led_values;
+} XLedFeedbackControl;
+.fi
+.DE
+.SH DIAGNOSTICS
+.TP 12
+\fIBadDevice\fP
+An invalid device was specified. The specified device does not exist or has
+not been opened by this client via \fIXOpenInputDevice\fP. This error may
+also occur if some other client has caused the specified device to become
+the X keyboard or X pointer device via the \fIXChangeKeyboardDevice\fP or
+\fIXChangePointerDevice\fP requests.
+.TP 12
+\fIBadMatch\fP
+This error may occur if an \fIXGetFeedbackControl\fP request was made specifying
+a device that has no feedbacks, or an \fIXChangeFeedbackControl\fP request was
+made with an \fIXFeedbackControl\fP structure that contains an invalid feedback
+type. It may also occur if an invalid combination of mask bits is specified
+(\fIDvKey\fP but no \fIDvAutoRepeatMode\fP for keyboard feedbacks), or if an
+invalid KeySym is specified for a string feedback.
+.TP 12
+\fIBadValue\fP
+Some numeric value falls outside the range of values accepted by the
+\fIXChangeFeedbackControl\fP request.
+Unless a specific range is specified for an argument, the full range defined
+by the argument's type is accepted. Any argument defined as a set of
+alternatives can generate this error.
+.SH "SEE ALSO"
+.br
+\fI\*(xL\fP
diff --git a/man/XGrabDevice.man b/man/XGrabDevice.man
new file mode 100644
index 0000000..8a5608c
--- /dev/null
+++ b/man/XGrabDevice.man
@@ -0,0 +1,207 @@
+.\"
+.\" Copyright ([\d,\s]*) by Hewlett-Packard Company, Ardent Computer,
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this documentation
+.\" for any purpose and without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\" Ardent, and Hewlett-Packard make no representations about the
+.\" suitability for any purpose of the information in this document. It is
+.\" provided \`\`as is'' without express or implied warranty.
+.\"
+.\" $Xorg: XGrabDev.man,v 1.4 2001/03/16 17:51:13 pookie Exp $
+.ds xL Programming With Xlib
+.TH XGrabDevice 3X11 "Release 6.6" "X Version 11" "X FUNCTIONS"
+.SH NAME
+XGrabDevice, XUngrabDevice \- grab/release the specified extension device
+.SH SYNTAX
+.nf
+\fB
+int XGrabDevice\^(\^\fIdisplay\fP, \fIdevice\fP\^, \fIgrab_window\fP\^, \fIowner_events\fP\^, \fIevent_count\fP\^, \fIevent_list\fP\^,
+\fIthis_device_mode\fP\^, \fIother_devices_mode\fP\^, \fItime\fP\^)
+ Display *\fIdisplay\fP\^;
+ XDevice *\fIdevice\fP\^;
+ Window \fIgrab_window\fP\^;
+ Bool \fIowner_events\fP\^;
+ int \fIevent_count\fP\^;
+ XEventClass *\fIevent_list\fP\^;
+ int \fIthis_device_mode\fP\^, \fIother_devices_mode\fP\^;
+ Time \fItime\fP\^;
+
+XUngrabDevice\^(\^\fIdisplay\fP, \fIdevice\fP\^, \fItime\fP\^)
+ Display *\fIdisplay\fP\^;
+ XDevice *\fIdevice\fP\^;
+ Time \fItime\fP\^;
+.fi
+\fP
+.SH ARGUMENTS
+.TP 12
+.I display
+Specifies the connection to the X server.
+.TP 12
+.I device
+Specifies the device to be grabbed or released.
+.TP 12
+.I grab_window
+Specifies the id of a window to be associated with the device.
+.TP 12
+.I owner_events
+Specifies a Boolean value that indicates whether the
+events from the device
+are to be reported as usual or reported with respect to the grab window
+if selected by the event list.
+.TP 12
+.I event_count
+Specifies the number of elements in the event_list array.
+.TP 12
+.I event_list
+Specifies a pointer to a list of event classes that indicates which events
+the client wishes to receive. These event classes must have been
+obtained specifying the device being grabbed.
+.TP 12
+.I this_device_mode
+Specifies further processing of events from this device.
+You can pass
+\fIGrabModeSync\fP
+or
+\fIGrabModeAsync\fP.
+.TP 12
+.I other_devices_mode
+Specifies further processing of events from other devices.
+You can pass
+\fIGrabModeSync\fP
+or
+\fIGrabModeAsync\fP.
+.TP 12
+.I time
+Specifies the time.
+You can pass either a timestamp or
+\fICurrentTime\fP.
+.SH DESCRIPTION
+The
+\fIXGrabDevice\fP
+request actively grabs control of the device and generates
+\fIDeviceFocusIn\fP
+and
+\fIDeviceFocusOut\fP
+events.
+Further device events are reported only to the
+grabbing client.
+\fIXGrabDevice\fP
+overrides any active device grab by this client.
+event_list is a pointer to a list of event classes. This list indicates
+which events the client wishes to receive while the grab is active.
+If owner_events is
+\fIFalse\fP ,
+all generated device events are reported with
+respect to grab_window if selected.
+If owner_events is
+\fITrue\fP
+and if a generated
+device event would normally be reported to this client, it is reported
+normally; otherwise, the event is reported with respect to the
+grab_window, and is only reported if specified in the event_list.
+.LP
+If the this_device_mode argument is
+\fIGrabModeAsync\fP ,
+device event processing continues
+as usual.
+If the device is currently frozen by this client,
+then processing of device events is resumed.
+If the this_device_mode argument is
+\fIGrabModeSync\fP ,
+the state of the device (as seen by client applications) appears to freeze,
+and the X server generates no further device events until the
+grabbing client issues a releasing
+\fIXAllowDeviceEvents\fP
+call or until the device grab is released.
+Actual device changes are not lost while the device is frozen;
+they are simply queued in the server for later processing.
+.LP
+If other_devices_mode is
+\fIGrabModeAsync\fP ,
+processing of events from other devices is unaffected
+by activation of the grab.
+If other_devices_mode is
+\fIGrabModeSync\fP,
+the state of all devices except the grabbed device
+ (as seen by client applications) appears to freeze,
+and the X server generates no further events from those devices
+until the grabbing client issues a releasing
+\fIXAllowDeviceEvents\fP
+call or until the device grab is released.
+Actual events are not lost while the devices are frozen;
+they are simply queued in the server for later processing.
+.LP
+If the device is actively grabbed by some other client,
+\fIXGrabDevice\fP
+fails and returns
+\fIAlreadyGrabbed\fP.
+If grab_window is not viewable,
+it fails and returns
+\fIGrabNotViewable\fP.
+If the device is frozen by an active grab of another client,
+it fails and returns
+\fIGrabFrozen\fP.
+If the specified time is earlier than the last-device-grab time
+or later than the current X server time,
+it fails and returns
+\fIGrabInvalidTime\fP.
+Otherwise, the last-device-grab time is set to the specified time
+\fI( CurrentTime\fP
+is replaced by the current X server time).
+.LP
+If a grabbed device is closed by a client while an active grab by that
+client is in effect, the active grab is released. If the device is
+frozen only by an active grab of the requesting client, it is thawed.
+.LP
+\fIXGrabDevice\fP
+can generate
+\fIBadClass\fP, \fIBadDevice\fP, \fIBadValue\fP, and \fIBadWindow\fP
+errors.
+.LP
+The
+\fIXUngrabDevice\fP
+request
+releases the device and any queued events if this client has it actively
+grabbed from either
+\fIXGrabDevice\fP
+or
+\fIXGrabDeviceKey\fP.
+If other devices are frozen by the grab, \fIXUngrabDevice\fP thaws them.
+\fIXUngrabDevice\fP
+does not release the device and any queued events
+if the specified time is earlier than
+the last-device-grab time or is later than the current X server time.
+It also generates
+\fIDeviceFocusIn\fP
+and
+\fIDeviceFocusOut\fP
+events.
+The X server automatically performs an
+\fIUngrabDevice\fP
+request if the event window for an
+active device grab becomes not viewable.
+.LP
+\fIXUngrabDevice\fP
+can generate a \fIBadDevice\fP error.
+.SH DIAGNOSTICS
+.TP 12
+\fIBadDevice\fP
+An invalid device was specified. The specified device does not exist or has
+not been opened by this client via \fIXOpenInputDevice\fP. This error may
+also occur if the specified device is the X keyboard or X pointer device.
+.TP 12
+\fIBadValue\fP
+Some numeric value falls outside the range of values accepted by the request.
+Unless a specific range is specified for an argument, the full range defined
+by the argument's type is accepted. Any argument defined as a set of
+alternatives can generate this error.
+.TP 12
+\fIBadWindow\fP
+A value for a Window argument does not name a defined Window.
+.SH "SEE ALSO"
+XAllowDeviceEvents(3X),
+XGrabDeviceButton(3X),
+XGrabDeviceKey(3X),
+.br
+\fI\*(xL\fP
diff --git a/man/XGrabDeviceButton.man b/man/XGrabDeviceButton.man
new file mode 100644
index 0000000..bb42011
--- /dev/null
+++ b/man/XGrabDeviceButton.man
@@ -0,0 +1,217 @@
+.\"
+.\" Copyright ([\d,\s]*) by Hewlett-Packard Company, Ardent Computer,
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this documentation
+.\" for any purpose and without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\" Ardent, and Hewlett-Packard make no representations about the
+.\" suitability for any purpose of the information in this document. It is
+.\" provided \`\`as is'' without express or implied warranty.
+.\"
+.\" $Xorg: XGrDvBut.man,v 1.4 2001/03/16 17:51:13 pookie Exp $
+.ds xL Programming With Xlib
+.TH XGrabDeviceButton 3X11 "Release 6.6" "X Version 11" "X FUNCTIONS"
+.SH NAME
+XGrabDeviceButton, XUngrabDeviceButton \- grab/ungrab extension input device buttons
+.SH SYNTAX
+\fB
+.nf
+XGrabDeviceButton\^(\^\fIdisplay\fP, \fIdevice\fP\^, \fIbutton\fP\^, \fImodifiers\fP\^, \fImodifier_device\fP\^, \fIgrab_window\fP\^,
+\fIowner_events\fP\^, \fIevent_count\fP\^, \fIevent_list\fP\^, \fIthis_device_mode\fP\^, \fIother_devices_mode\fP\^)
+ Display *\fIdisplay\fP\^;
+ XDevice *\fIdevice\fP\^;
+ unsigned int \fIbutton\fP\^;
+ unsigned int \fImodifiers\fP\^;
+ XDevice *\fImodifier_device\fP\^;
+ Window \fIgrab_window\fP\^;
+ Bool \fIowner_events\fP\^;
+ unsigned int \fIevent_count\fP\^;
+ XEventClass *\fIevent_list\fP\^;
+ int \fIthis_device_mode\fP\^, \fIother_devices_mode\fP\^;
+
+XUngrabDeviceButton\^(\^\fIdisplay\fP\^, \fIdevice\fP\^, \fIbutton\fP\^, \fImodifiers\fP\^, \fImodifier_device\fP\^, \fIgrab_window\fP\^)
+ Display *\fIdisplay\fP\^;
+ XDevice *\fIdevice\fP\^;
+ unsigned int \fIbutton\fP\^;
+ unsigned int \fImodifiers\fP\^;
+ XDevice *\fImodifier_device\fP\^;
+ Window \fIgrab_window\fP\^;
+.fi
+\fP
+.SH ARGUMENTS
+.ds Bu grabbed or released
+.TP 12
+.I display
+Specifies the connection to the X server.
+.TP 12
+.I device
+Specifies the device that is to be \*(Bu
+.TP 12
+.I button
+Specifies the device button that is to be \*(Bu or
+\fIAnyButton\fP.
+.TP 12
+.I modifiers
+Specifies the set of keymasks or
+\fIAnyModifier\fP.
+The mask is the bitwise inclusive OR of the valid keymask bits.
+Valid bits are: Shiftmask, LockMask, ControlMask, Mod1Mask, Mod2Mask,
+Mod3Mask, Mod4Mask, Mod5Mask.
+.TP 12
+.I modifier_device
+specifies the device whose modifiers are to be used. If the modifier_device
+specified is NULL, the X keyboard will be used as the modifier_device.
+.TP 12
+.I grab_window
+Specifies the grab window.
+.TP 12
+.I owner_events
+Specifies a Boolean value that indicates whether the device
+events are to be reported as usual or reported with respect to the grab window
+if selected by the event list.
+.TP 12
+.I event_count
+Specifies the number of event classes in the event list.
+.TP 12
+.I event_list
+Specifies which events are reported to the client.
+.TP 12
+.I this_device_mode
+Specifies further processing of events from this device.
+You can pass \fIGrabModeSync\fP or \fIGrabModeAsync\fP.
+.TP 12
+.I other_devices_mode
+Specifies further processing of events from all other devices.
+You can pass \fIGrabModeSync\fP or \fIGrabModeAsync\fP.
+.SH DESCRIPTION
+The \fIXGrabDeviceButton\fP request establishes a passive grab.
+In the future,
+the device is actively grabbed (as for \fIXGrabDevice\fP,
+the last-grab time is set to the time at which the button was pressed
+(as transmitted in the
+\fIDeviceButtonPress\fP
+event), and the
+\fIDeviceButtonPress\fP
+event is reported if all of the following conditions are true:
+.IP \(bu 5
+The device is not grabbed, and the specified button is logically pressed
+when the specified modifier keys are logically down on the specified
+modifier device
+and no other buttons or modifier keys are logically down.
+.IP \(bu 5
+Either the grab window is an ancestor of (or is) the focus window, OR
+the grab window is a descendent of the focus window and contains the
+device.
+.IP \(bu 5
+A passive grab on the same button/modifier combination does not exist
+on any ancestor of grab_window.
+.LP
+The interpretation of the remaining arguments is as for
+\fIXGrabDevice\fP.
+The active grab is terminated automatically when the logical state of the
+device has all buttons released
+(independent of the logical state of the modifier keys).
+.LP
+Note that the logical state of a device (as seen by client applications)
+may lag the physical state if device event processing is frozen.
+.LP
+This request overrides all previous grabs by the same client on the same
+button/modifier combinations on the same window.
+A modifiers of
+\fIAnyModifier\fP
+is equivalent to issuing the grab request for all
+possible modifier combinations (including the combination of no modifiers).
+It is not required that all modifiers specified have currently assigned
+KeyCodes.
+A button of
+\fIAnyButton\fP
+is equivalent to
+issuing the request for all possible buttons.
+Otherwise, it is not required that the specified button currently be assigned
+to a physical button.
+.LP
+A modifier_device of NULL indicates that the X keyboard is to be used as the
+modifier_device.
+.LP
+If some other client has already issued a
+\fIXGrabDeviceButton\fP
+with the same button/modifier combination on the same window, a
+\fIBadAccess\fP
+error results.
+When using
+\fIAnyModifier\fP
+or
+\fIAnyButton\fP ,
+the request fails completely,
+and a
+\fIBadAccess\fP
+error results (no grabs are
+established) if there is a conflicting grab for any combination.
+\fIXGrabDeviceButton\fP
+has no effect on an active grab.
+.LP
+\fIXGrabDeviceButton\fP
+can generate
+\fIBadClass\fP,
+\fIBadDevice\fP,
+\fIBadMatch\fP,
+\fIBadValue\fP,
+and
+\fIBadWindow\fP
+errors.
+.P
+The \fIXUngrabDeviceButton\fP
+request releases the passive grab for a
+button/modifier combination on the specified window if
+it was grabbed by this client.
+A modifier of \fIAnyModifier\fP is
+equivalent to issuing
+the ungrab request for all possible modifier combinations, including
+the combination of no modifiers.
+A button of
+\fIAnyButton\fP
+is equivalent to issuing the
+request for all possible buttons.
+\fIXUngrabDeviceButton\fP
+has no effect on an active grab.
+.LP
+A modifier_device of NULL indicates that the X keyboard should be used as
+the modifier_device.
+.LP
+\fIXUngrabDeviceButton\fP
+can generate
+\fIBadDevice\fP,
+\fIBadMatch\fP,
+\fIBadValue\fP
+and
+\fIBadWindow\fP
+errors.
+.SH DIAGNOSTICS
+.TP 12
+\fIBadDevice\fP
+An invalid device was specified. The specified device does not exist or has
+not been opened by this client via \fIXOpenInputDevice\fP. This error may
+also occur if the specified device is the X keyboard or X pointer device.
+.TP 12
+\fIBadMatch\fP
+This error may occur if an \fIXGrabDeviceButton\fP request was made
+specifying
+a device that has no buttons, or specifying a modifier device
+that has no keys.
+.TP 12
+\fIBadValue\fP
+Some numeric value falls outside the range of values accepted by the request.
+Unless a specific range is specified for an argument, the full range defined
+by the argument's type is accepted. Any argument defined as a set of
+alternatives can generate this error.
+.TP 12
+\fIBadWindow\fP
+A value for a Window argument does not name a defined Window.
+.SH "SEE ALSO"
+XAllowDeviceEvents(3X),
+.br
+XGrabDevice(3X),
+.br
+XGrabDeviceKey(3X),
+.br
+\fI\*(xL\fP
diff --git a/man/XGrabDeviceKey.man b/man/XGrabDeviceKey.man
new file mode 100644
index 0000000..4f92451
--- /dev/null
+++ b/man/XGrabDeviceKey.man
@@ -0,0 +1,231 @@
+.\"
+.\" Copyright ([\d,\s]*) by Hewlett-Packard Company, Ardent Computer,
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this documentation
+.\" for any purpose and without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\" Ardent, and Hewlett-Packard make no representations about the
+.\" suitability for any purpose of the information in this document. It is
+.\" provided \`\`as is'' without express or implied warranty.
+.\"
+.\" $Xorg: XGrDvKey.man,v 1.4 2001/03/16 17:51:13 pookie Exp $
+.ds xL Programming with Xlib
+.TH XGrabDeviceKey 3X11 "Release 6.6" "X Version 11" "X FUNCTIONS"
+.SH NAME
+XGrabDeviceKey, XUngrabDeviceKey \- grab/ungrab extension input device Keys
+.SH SYNTAX
+XGrabDeviceKey\^(\^\fIdisplay\fP, \fIdevice\fP\^, \fIKey\fP\^, \fImodifiers\fP\^,
+\fImodifier_device\fP\^, \fIgrab_window\fP\^, \fIowner_events\fP\^,
+.br
+\fIevent_count\fP\^, \fIevent_list\fP\^, \fIthis_device_mode\fP\^,
+\fIother_devices_mode\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ XDevice *\fIdevice\fP\^;
+.br
+ unsigned int \fIKey\fP\^;
+.br
+ unsigned int \fImodifiers\fP\^;
+.br
+ XDevice *\fImodifier_device\fP\^;
+.br
+ Window \fIgrab_window\fP\^;
+.br
+ Bool \fIowner_events\fP\^;
+.br
+ unsigned int \fIevent_count\fP\^;
+.br
+ XEventClass \fIevent_list\fP\^;
+.br
+ int \fIthis_device_mode\fP\^, \fIother_devices_mode\fP\^;
+.sp
+XUngrabDeviceKey\^(\fIdisplay\fP\^, \fIdevice\fP\^, \fIKey\fP\^, \fImodifiers\fP\^,
+\fImodifier_device\fP\^, \fIgrab_window\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ XDevice *\fIdevice\fP\^;
+.br
+ unsigned int \fIKey\fP\^;
+.br
+ unsigned int \fImodifiers\fP\^;
+.br
+ XDevice *\fImodifier_device\fP\^;
+.br
+ Window \fIgrab_window\fP\^;
+.SH ARGUMENTS
+.ds Bu grabbed or released
+.TP 12
+.I display
+Specifies the connection to the X server.
+.TP 12
+.I device
+Specifies the device that is to be \*(Bu
+.TP 12
+.I Key
+Specifies the device Key that is to be \*(Bu or
+\fIAnyKey\fP.
+.TP 12
+.I modifiers
+Specifies the set of keymasks or
+\fIAnyModifier\fP.
+The mask is the bitwise inclusive OR of the valid keymask bits.
+Valid bits are: ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask,
+Mod3Mask, Mod4Mask, Mod5Mask.
+.TP 12
+.I modifier_device
+Specifies the device whose modifiers are to be used. If a modifier_device of
+NULL is specified, the X keyboard will be used as the modifier_device.
+.TP 12
+.I grab_window
+Specifies the grab window.
+.TP 12
+.I owner_events
+Specifies a Boolean value that indicates whether the device
+events are to be reported as usual or reported with respect to the grab window
+if selected by the event list.
+.TP 12
+.I event_count
+Specifies the number of event classes in the event list.
+.TP 12
+.I event_list
+Specifies which device events are reported to the client.
+.TP 12
+.I this_device_mode
+Specifies further processing of events from this device.
+You can pass \fIGrabModeSync\fP or \fIGrabModeAsync\fP.
+.TP 12
+.I other_devices_mode
+Specifies further processing of events from other devices.
+You can pass
+\fIGrabModeSync\fP
+or
+\fIGrabModeAsync\fP.
+.SH DESCRIPTION
+The \fIXGrabDeviceKey\fP request establishes a passive grab.
+In the future,
+the device is actively grabbed (as for
+\fIXGrabDevice\fP,
+the last-device-grab time is set to the time at which the Key was pressed
+(as transmitted in the
+\fIDeviceKeyPress\fP
+event), and the
+\fIDeviceKeyPress\fP
+event is reported if all of the following conditions are true:
+.IP \(bu 5
+The device is not grabbed, and the specified key is logically pressed
+when the specified modifier keys are logically down,
+and no other keys or modifier keys are logically down.
+.IP \(bu 5
+The grab_window is an ancestor (or is) the focus window OR the grab
+window is a descendant of the focus window and contains the device.
+.IP \(bu 5
+The confine_to window (if any) is viewable.
+.IP \(bu 5
+A passive grab on the same key/modifier combination does not exist
+on any ancestor of grab_window.
+.LP
+The interpretation of the remaining arguments is as for
+\fIXGrabDevice\fP .
+The active grab is terminated automatically when the logical state of the
+device has the specified key released.
+.LP
+Note that the logical state of a device (as seen by means of the X protocol )
+may lag the physical state if device event processing is frozen.
+.LP
+If the key is not \fIAnyKey\fP, it must be in the range specified by
+min_keycode and max_keycode as returned by the \fIXListInputDevices\fP
+request. Otherwise, a \fIBadValue\fP error results.
+.LP
+This request overrides all previous grabs by the same client on the same
+Key/modifier combinations on the same window.
+A modifier of
+\fIAnyModifier\fP
+is equivalent to issuing the grab request for all
+possible modifier combinations (including the combination of no modifiers).
+It is not required that all modifiers specified have currently assigned
+KeyCodes.
+A key of
+\fIAnyKey\fP
+is equivalent to
+issuing the request for all possible keys.
+Otherwise, it is not required that the specified key currently be assigned
+to a physical Key.
+.LP
+If a modifier_device of NULL is specified, the X keyboard will be used as
+the modifier_device.
+.LP
+If some other client has already issued a
+\fIXGrabDeviceKey\fP
+with the same Key/modifier combination on the same window, a
+\fIBadAccess\fP
+error results.
+When using
+\fIAnyModifier\fP
+or
+\fIAnyKey\fP ,
+the request fails completely,
+and a
+\fIBadAccess\fP
+error results (no grabs are
+established) if there is a conflicting grab for any combination.
+\fIXGrabDeviceKey\fP
+has no effect on an active grab.
+.LP
+\fIXGrabDeviceKey\fP
+can generate
+\fIBadAccess\fP,
+\fIBadClass\fP,
+\fIBadDevice\fP,
+\fIBadMatch\fP,
+\fIBadValue\fP,
+and
+\fIBadWindow\fP
+errors. It returns \fISuccess\fP on successful completion of the request.
+.P
+The \fIXUngrabDeviceKey\fP
+request releases the passive grab for a key/modifier combination on the
+specified window if it was grabbed by this client.
+A modifier of \fIAnyModifier\fP is
+equivalent to issuing
+the ungrab request for all possible modifier combinations, including
+the combination of no modifiers.
+A Key of \fIAnyKey\fP
+is equivalent to issuing the request for all possible Keys.
+\fIXUngrabDeviceKey\fP has no effect on an active grab.
+.LP
+If a modifier_device of NULL is specified, the X keyboard will be used as the
+modifier_device.
+.LP
+\fIXUngrabDeviceKey\fP can generate \fIBadDevice\fP, \fIBadMatch\fP,
+\fIBadValue\fP and \fIBadWindow\fP errors.
+.SH DIAGNOSTICS
+.TP 12
+\fIBadDevice\fP
+An invalid device was specified. The specified device does not exist or has
+not been opened by this client via \fIXOpenInputDevice\fP. This error may
+also occur if the specified device is the X keyboard or X pointer device.
+.TP 12
+\fIBadMatch\fP
+This error may occur if an \fIXGrabDeviceKey\fP request was made
+specifying a device that has no keys, or a modifier device that has no
+keys.
+.TP 12
+\fIBadValue\fP
+Some numeric value falls outside the range of values accepted by the request.
+Unless a specific range is specified for an argument, the full range defined
+by the argument's type is accepted. Any argument defined as a set of
+alternatives can generate this error.
+.TP 12
+\fIBadWindow\fP
+A value for a Window argument does not name a defined Window.
+.SH "SEE ALSO"
+XAllowDeviceEvents(3X),
+.br
+XGrabDevice(3X),
+.br
+XGrabDeviceButton(3X),
+.br
+.br
+\fI\*(xL\fP
diff --git a/man/XListInputDevices.man b/man/XListInputDevices.man
new file mode 100644
index 0000000..ea780c6
--- /dev/null
+++ b/man/XListInputDevices.man
@@ -0,0 +1,234 @@
+.\"
+.\" Copyright ([\d,\s]*) by Hewlett-Packard Company, Ardent Computer,
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this documentation
+.\" for any purpose and without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\" Ardent, and Hewlett-Packard make no representations about the
+.\" suitability for any purpose of the information in this document. It is
+.\" provided \`\`as is'' without express or implied warranty.
+.\"
+.\" $Xorg: XListDev.man,v 1.4 2001/03/16 17:51:13 pookie Exp $
+.ds xL Programming with Xlib
+.TH XListInputDevices 3X11 "Release 6.6" "X Version 11" "X FUNCTIONS"
+.SH NAME
+XListInputDevices, XFreeDeviceList \- list available input devices
+.SH SYNTAX
+XDeviceInfo *XListInputDevices\^(\^\fIdisplay\fP, \fIndevices_return\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ int *\fIndevices_return\fP\^;
+.sp
+XFreeDeviceList\^(\^\fIlist\fP\^)
+.br
+ XDeviceInfo *\fIlist\fP\^;
+.SH ARGUMENTS
+.TP 12
+.I display
+Specifies the connection to the X server.
+.TP 12
+.I ndevices_return
+Specifies a pointer to a variable where the number of available devices can
+be returned.
+.TP 12
+.I list
+Specifies the list of devices to free. The \fIXFreeDeviceList\fP function
+frees the list of available extension input devices.
+.SH DESCRIPTION
+The \fIXListInputDevices\fP
+request lists the available extension input devices. This list includes the
+X pointer and X keyboard, any other input devices that are currently accessible
+through the X server, and any input devices that are not currently accessible
+through the X server but could be accessed if requested.
+.LP
+Some server implementations may make all input devices available at the time
+the server is initialized. Others may wait until requested by a client to
+access an input device. In the latter case, it is possible that an input
+device will be listed as available at one time but not at another.
+.LP
+For each input device available to the server, the XListInputDevices
+request returns an XDeviceInfo structure. That structure contains a
+pointer to a list of structures, each of which contains information about
+one class of input supported by the device.
+
+The XDeviceInfo structure is defined as follows:
+
+.DS
+.nf
+typedef struct _XDeviceInfo
+{
+ XID id;
+ Atom type;
+ char *name;
+ int num_classes;
+ int use;
+ XAnyClassPtr inputclassinfo;
+} XDeviceInfo;
+.fi
+.DE
+.LP
+The id is a number in the range 0-128 that uniquely identifies
+the device. It is assigned to the device when it is initialized by the server.
+.LP
+The type field is of type Atom and indicates the nature
+of the device.
+.LP
+The name field contains a pointer to a null-terminated
+string that corresponds to one of the defined device
+types. The name will correspond to one of the following
+strings (defined in the header file \fIXI.h\fP:
+.LP
+.DS
+XI_MOUSE
+XI_TABLET
+XI_KEYBOARD
+XI_TOUCHSCREEN
+XI_TOUCHPAD
+XI_BUTTONBOX
+XI_BARCODE
+XI_TRACKBALL
+XI_QUADRATURE
+XI_ID_MODULE
+XI_ONE_KNOB
+XI_NINE_KNOB
+XI_KNOB_BOX
+XI_SPACEBALL
+XI_DATAGLOVE
+XI_EYETRACKER
+XI_CURSORKEYS
+XI_FOOTMOUSE
+.DE
+.LP
+These names may be directly compared with the name field of the
+XDeviceInfo structure, or used in an XInternAtom request to return
+an atom that can be compared with the type field of the XDeviceInfo
+structure.
+.LP
+The num_classes field is a number in the
+range 0-255 that specifies the number of input classes
+supported by the device for which information is
+returned by ListInputDevices. Some input classes, such
+as class Focus and class Proximity do not have any
+information to be returned by ListInputDevices.
+.LP
+The use field specifies how the device is currently
+being used. If the value is \fIIsXKeyboard\fP, the device is
+currently being used as the X keyboard. If the value
+is \fIIsXPointer\fP, the device is currently being used as
+the X pointer. If the value is \fIIsXExtensionDevice\fP, the
+device is available for use as an extension device.
+.LP
+The inputclassinfo field contains a pointer to the first input-class
+specific data. The first two fields are common to all
+classes.
+.LP
+The class field is a number in the range 0-255.
+It uniquely identifies the class of input for which
+information is returned. Currently defined classes
+are KeyClass, ButtonClass, and ValuatorClass.
+.LP
+The length field is a number in the range 0- 255.
+It specifies the number of bytes of data that are
+contained in this input class. The length includes the
+class and length fields.
+.LP
+The XKeyInfo structure describes the characteristics of the keys on the
+device. It is defined as follows:
+.LP
+.DS
+.nf
+typedef struct _XKeyInfo {
+ XID class;
+ int length;
+ unsigned short min_keycode;
+ unsigned short max_keycode;
+ unsigned short num_keys;
+} XKeyInfo;
+.fi
+.DE
+.LP
+min_keycode is of type KEYCODE. It specifies the
+minimum keycode that the device will report. The
+minimum keycode will not be smaller than 8.
+.LP
+max_keycode is of type KEYCODE. It specifies the
+maximum keycode that the device will report. The
+maximum keycode will not be larger than 255.
+.LP
+num_keys specifies the number of keys that the device has.
+.LP
+The XButtonInfo structure defines the characteristics of the buttons
+on the device. It is defined as follows:
+.LP
+.DS
+.nf
+typedef struct _XButtonInfo {
+ XID class;
+ int length;
+ short num_buttons;
+} XButtonInfo;
+.fi
+.DE
+.LP
+num_buttons specifies the number of buttons that the device has.
+.LP
+The XValuatorInfo structure defines the characteristics of the valuators
+on the device. It is defined as follows:
+.LP
+.DE
+.nf
+typedef struct _XValuatorInfo {
+ XID class;
+ int length;
+ unsigned char num_axes;
+ unsigned char mode;
+ unsigned long motion_buffer;
+ XAxisInfoPtr axes;
+} XValuatorInfo;
+.fi
+.DS
+num_axes contains the number of axes the device supports.
+.LP
+mode is a constant that has one of the following
+values: Absolute or Relative. Some devices allow the
+mode to be changed dynamically via the SetDeviceMode
+request.
+.LP
+motion_buffer_size is a cardinal number that specifies
+the number of elements that can be contained in the
+motion history buffer for the device.
+.LP
+The axes field contains a pointer to an XAxisInfo structure.
+.LP
+The XAxisInfo structure is defined as follows:
+.LP
+.DS
+.nf
+typedef struct _XAxisInfo {
+ int resolution;
+ int min_value;
+ int max_value;
+} XAxisInfo;
+.fi
+.DE
+.LP
+The resolution contains a number in counts/meter.
+.LP
+The min_val field contains a number that specifies
+the minimum value the device reports for this axis.
+For devices whose mode is Relative, the min_val field
+will contain 0.
+.LP
+The max_val field contains a number that specifies
+the maximum value the device reports for this axis.
+For devices whose mode is Relative, the max_val field
+will contain 0.
+.LP
+To free the \fIXDeviceInfo\fP array created by \fIXListInputDevices\fP,
+use \fIXFreeDeviceList\fP.
+.SH DIAGNOSTICS
+none.
+.SH "SEE ALSO"
+.br
+\fI\*(xL\fP
diff --git a/man/XOpenDevice.man b/man/XOpenDevice.man
new file mode 100644
index 0000000..915865e
--- /dev/null
+++ b/man/XOpenDevice.man
@@ -0,0 +1,128 @@
+.\"
+.\" Copyright ([\d,\s]*) by Hewlett-Packard Company, Ardent Computer,
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this documentation
+.\" for any purpose and without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\" Ardent, and Hewlett-Packard make no representations about the
+.\" suitability for any purpose of the information in this document. It is
+.\" provided \`\`as is'' without express or implied warranty.
+.\"
+.\" $Xorg: XOpenDev.man,v 1.4 2001/03/16 17:51:13 pookie Exp $
+.ds xL Programming with Xlib
+.TH XOpenDevice 3X11 "Release 6.6" "X Version 11" "X FUNCTIONS"
+.SH NAME
+XOpenDevice, XCloseDevice \- open or close an extension input device
+.SH SYNTAX
+\fB
+.nf
+XDevice *XOpenDevice\^(\^\fIdisplay\fP, \fIdevice_id\fP\^)
+ Display *\fIdisplay\fP\^;
+ XID \fIdevice_id\fP\^;
+
+XCloseDevice\^(\^\fIdisplay\fP, \fIdevice\fP\^)
+ Display *\fIdisplay\fP\^;
+ XDevice *\fIdevice\fP\^;
+.fi
+\fP
+.SH ARGUMENTS
+.TP 12
+.I display
+Specifies the connection to the X server.
+.TP 12
+.I device_id
+Specifies the id of the device to be opened
+.TP 12
+.I device
+Specifies the device to be closed
+.SH DESCRIPTION
+The \fIXOpenDevice\fP
+request makes an input device accessible to a client through input extension
+protocol requests. If successful, it returns a pointer to an \fBXDevice\fP
+structure.
+.LP
+The \fIXCloseDevice\fP request makes an input device inaccessible to a
+client through input extension protocol requests. Before terminating,
+and client that has opened input devices through the input extension
+should close them via \fICloseDevice\fP.
+.LP
+When a client makes an \fIXCloseDevice\fP request,
+any active grabs that the client has on the device are
+released. Any event selections that the client has are deleted, as well as
+any passive grabs. If the requesting client is the last client accessing
+the device, the server may disable all access by X to the device.
+.LP
+\fIXOpenDevice\fP and \fIXCloseDevice\fP can generate a \fIBadDevice\fP
+error.
+.SH STRUCTURES
+The
+\fIXDevice\fP structure returned by \fIXOpenDevice\fP contains:
+.nf
+typedef struct {
+ XID device_id;
+ int num_classes;
+ XInputClassInfo *classes;
+} XDevice;
+.fi
+.LP
+The classes field is a pointer to an array of XInputClassInfo structures.
+Each element of this array contains an event type base for a class of input
+supported by the specified device. The num_classes field indicates the
+number of elements in the classes array.
+.LP
+The
+\fIXInputClassInfo\fP
+structure contains:
+.LP
+.nf
+typedef struct {
+ unsigned char input_class;
+ unsigned char event_type_base;
+} XInputClassInfo;
+.fi
+.LP
+The input_class field identifies one class of input
+supported by the device. Defined types include \fIKeyClass\fP,
+\fIButtonClass\fP, \fIValuatorClass\fP, \fIProximityClass\fP,
+\fIFeedbackClass\fP, \fIFocusClass\fP, and \fIOtherClass\fP.
+The event_type_base identifies the event type of the first event in that class.
+.LP
+The information contained in the \fIXInputClassInfo\fP structure is used
+by macros to obtain the event classes that clients use in making
+\fIXSelectExtensionEvent\fP requests. Currently defined macros include
+\fIDeviceKeyPress\fP, \fIDeviceKeyRelease\fP, \fIDeviceButtonPress\fP,
+\fIDeviceButtonRelese\fP, \fIDeviceMotionNotify\fP, \fIDeviceFocusIn\fP,
+\fIDeviceFocusOut\fP, \fIProximityIn\fP, \fIProximityOut\fP,
+\fIDeviceStateNotify\fP, \fIDeviceMappiingNotify\fP,
+\fIChangeDeviceNotify\fP, \fIDevicePointerMotionHint\fP,
+\fIDeviceButton1Motion\fP, \fIDeviceButton2Motion\fP, \fIDeviceButton3Motion\fP,
+\fIDeviceButton4Motion\fP, \fIDeviceButton5Motion\fP, \fIDeviceButtonMotion\fP,
+\fIDeviceOwnerGrabButton\fP, \fIDeviceButtonPressGrab\fP, and
+\fINoExtensionEvent\fP.
+.LP
+To obtain the proper event class for a particular device, one of the above
+macros is invoked using the \fIXDevice\fP structure for that device. For
+example,
+.LP
+.nf
+DeviceKeyPress (*device, type, eventclass);
+.fi
+.LP
+returns the \fIDeviceKeyPress\fP event type and the eventclass for
+\fIDeviceKeyPress\fP events from the specified device.
+.LP
+This \fIeventclass\fP can then be used in an \fIXSelectExtensionEvent\fP
+request to ask the server to send \fIDeviceKeyPress\fP events from this device.
+When a selected event is received via \fIXNextEvent\fP, the \fItype\fP can be
+used for comparison with the type in the event.
+.SH DIAGNOSTICS
+.TP 12
+\fIBadDevice\fP
+An invalid device was specified. The specified device does not exist,
+or is the X keyboard or X pointer. This error may
+also occur if some other client has caused the specified device to become
+the X keyboard or X pointer device via the \fIXChangeKeyboardDevice\fP or
+\fIXChangePointerDevice\fP requests.
+.SH "SEE ALSO"
+.br
+\fI\*(xL\fP
diff --git a/man/XQueryDeviceState.man b/man/XQueryDeviceState.man
new file mode 100644
index 0000000..195d5e4
--- /dev/null
+++ b/man/XQueryDeviceState.man
@@ -0,0 +1,99 @@
+.\"
+.\" Copyright ([\d,\s]*) by Hewlett-Packard Company, Ardent Computer,
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this documentation
+.\" for any purpose and without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\" Ardent, and Hewlett-Packard make no representations about the
+.\" suitability for any purpose of the information in this document. It is
+.\" provided \`\`as is'' without express or implied warranty.
+.\"
+.\" $Xorg: XQueryDv.man,v 1.4 2001/03/16 17:51:13 pookie Exp $
+.ds xL Programming with Xlib
+.TH XQueryDeviceState 3X11 "Release 6.6" "X Version 11" "X FUNCTIONS"
+.SH NAME
+XQueryDeviceState \- query the state of an extension input device.
+.SH SYNTAX
+XQueryDeviceState\^(\^\fIdisplay\fP, \fIdevice\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ XDevice *\fIdevice\fP\^;
+.SH ARGUMENTS
+.TP 12
+.I display
+Specifies the connection to the X server.
+.TP 12
+.I device
+Specifies the device whose state is to be queried.
+.SH DESCRIPTION
+The
+\fIXQueryDeviceState\fP
+request queries the state of an input device. The current state of
+keys and buttons (up or down), and valuators (current value) on the device
+is reported by this request. Each key or button is represented by a bit
+in the \fIXDeviceState\fP structure that is returned. Valuators on the
+device report 0 if they are reporting relative information, and the
+current value if they are reporting absolute information.
+.LP
+\fIXQueryDeviceState\fP
+can generate a \fIBadDevice\fP error.
+.SH STRUCTURES
+The
+\fIXDeviceState\fP
+structure contains:
+.LP
+.nf
+typedef struct {
+ XID device_id;
+ int num_classes;
+ XInputClass *data;
+} XDeviceState;
+.fi
+.LP
+The
+\fIXValuatorState\fP
+structure contains:
+.LP
+.nf
+typedef struct {
+ unsigned char class;
+ unsigned char length;
+ unsigned char num_valuators;
+ unsigned char mode;
+ int *valuators;
+} XValuatorState;
+.fi
+.LP
+The \fIXKeyState\fP structure contains:
+.LP
+.nf
+typedef struct {
+ unsigned char class;
+ unsigned char length;
+ short num_keys;
+ char keys[32];
+} XKeyState;
+.fi
+.LP
+The \fIXButtonState\fP structure contains:
+.LP
+.nf
+typedef struct {
+ unsigned char class;
+ unsigned char length;
+ short num_buttons;
+ char buttons[32];
+} XButtonState;
+.fi
+.SH DIAGNOSTICS
+.TP 12
+\fIBadDevice\fP
+An invalid device was specified. The specified device does not exist or has
+not been opened by this client via \fIXOpenInputDevice\fP. This error may
+also occur if some other client has caused the specified device to become
+the X keyboard or X pointer device via the \fIXChangeKeyboardDevice\fP or
+\fIXChangePointerDevice\fP requests.
+.SH "SEE ALSO"
+.br
+\fI\*(xL\fP
diff --git a/man/XSelectExtensionEvent.man b/man/XSelectExtensionEvent.man
new file mode 100644
index 0000000..95ec1bc
--- /dev/null
+++ b/man/XSelectExtensionEvent.man
@@ -0,0 +1,148 @@
+.\"
+.\" Copyright ([\d,\s]*) by Hewlett-Packard Company, Ardent Computer,
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this documentation
+.\" for any purpose and without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\" Ardent, and Hewlett-Packard make no representations about the
+.\" suitability for any purpose of the information in this document. It is
+.\" provided \`\`as is'' without express or implied warranty.
+.\"
+.\" $Xorg: XSelExtEv.man,v 1.4 2001/03/16 17:51:13 pookie Exp $
+.ds xL Programming with Xlib
+.TH XSelectExtensionEvent 3X11 "Release 6.6" "X Version 11" "X FUNCTIONS"
+.SH NAME
+XSelectExtensionEvent, XGetSelectedExtensionEvents \- select extension events, get the list of currently selected extension events
+.SH SYNTAX
+XSelectExtensionEvent\^(\^\fIdisplay\fP, \fIw\fP\^, \fIevent_list\fP\^, \fIevent_count\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ XEventClass *\fIevent_list\fP\^;
+.br
+ int \fIevent_count\fP\^;
+.sp
+XGetSelectedExtensionEvents\^(\^\fIdisplay\fP, \fIw\fP\^, \fIthis_client_event_count_return\fP\^,
+.br
+\fIthis_client_event_list_return\fP\^, \fIall_clients_event_count_return\fP\^,
+\fIall_clients_event_list_return\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIw\fP\^;
+.br
+ int \fIthis_client_event_count_return\fP\^;
+.br
+ XEventClass *\fIthis_client_event_list_return\fP\^;
+.br
+ int \fIall_clients_event_count_return\fP\^;
+.br
+ XEventClass *\fIall_clients_event_list_return\fP\^;
+.SH ARGUMENTS
+.TP 12
+.I display
+Specifies the connection to the X server.
+.ds Wi whose events you are interested in
+.TP 12
+.I w
+Specifies the window \*(Wi.
+.TP 12
+.I event_list
+Specifies the list of event classes that describe the events you are interested in.
+.TP 12
+.I event_count
+Specifies the count of event classes in the event list.
+.TP 12
+.I this_client_event_count_return
+Returns the count of event classes selected by this client.
+.TP 12
+.I this_client_event_list_return
+Returns a pointer to the list of event classes selected by this client.
+.TP 12
+.I all_clients_event_count_return
+Returns the count of event classes selected by all clients.
+.TP 12
+.I all_clients_event_list_return
+Returns a pointer to the list of event classes selected by all clients.
+.SH DESCRIPTION
+The
+\fIXSelectExtensionEvent\fP request causes the X server to report the
+events associated with the
+specified list of event classes.
+Initially, X will not report any of these events.
+Events are reported relative to a window.
+If a window is not interested in a device event, it usually propagates to
+the closest ancestor that is interested,
+unless the do_not_propagate mask prohibits it.
+.LP
+Multiple clients can select for the same events on the same window
+with the following restrictions:
+.IP \(bu 5
+Multiple clients can select events on the same window because their event masks
+are disjoint.
+When the X server generates an event, it reports it
+to all interested clients.
+.IP \(bu 5
+Only one client at a time can select a
+\fIDeviceButtonPress\fP
+event with automatic passive grabbing enabled, which is associated with
+the event class \fIDeviceButtonPressGrab\fP.
+To receive \fIDeviceButtonPress\fP events without automatic passive
+grabbing, use event class \fIDeviceButtonPress\fP but do not specify
+event class \fIDeviceButtonPressGrab\fP.
+.LP
+The server reports the event to all interested clients.
+.LP
+Information contained in the \fIXDevice\fP structure returned by
+\fIXOpenDevice\fP is used
+by macros to obtain the event classes that clients use in making
+\fIXSelectExtensionEvent\fP requests. Currently defined macros include
+\fIDeviceKeyPress\fP, \fIDeviceKeyRelease\fP, \fIDeviceButtonPress\fP,
+\fIDeviceButtonRelese\fP, \fIDeviceMotionNotify\fP, \fIDeviceFocusIn\fP,
+\fIDeviceFocusOut\fP, \fIProximityIn\fP, \fIProximityOut\fP,
+\fIDeviceStateNotify\fP, \fIDeviceMappiingNotify\fP,
+\fIChangeDeviceNotify\fP, \fIDevicePointerMotionHint\fP,
+\fIDeviceButton1Motion\fP, \fIDeviceButton2Motion\fP, \fIDeviceButton3Motion\fP,
+\fIDeviceButton4Motion\fP, \fIDeviceButton5Motion\fP, \fIDeviceButtonMotion\fP,
+\fIDeviceOwnerGrabButton\fP, \fIDeviceButtonPressGrab\fP, and
+\fINoExtensionEvent\fP.
+.LP
+To obtain the proper event class for a particular device, one of the above
+macros is invoked using the \fIXDevice\fP structure for that device. For
+example,
+.LP
+.DS 0
+.TA .5i
+.ta .5i
+DeviceKeyPress (*device, type, eventclass);
+.DE
+.LP
+returns the \fIDeviceKeyPress\fP event type and the eventclass for selecting
+\fIDeviceKeyPress\fP events from this device.
+.LP
+\fIXSelectExtensionEvent\fP
+can generate a \fIBadWindow\fP or \fIBadClass\fP error.
+The
+\fIXGetSelectedExtensionEvents\fP
+request reports the extension events selected by this client and all clients
+for the specified window. This request returns pointers to two
+\fIXEventClass\fP
+arrays. One lists the input extension events selected by this client from
+the specified window. The other lists the event classes selected by all
+clients from the specified window. You should use \fIXFree\fP to free these
+two arrays.
+.LP
+\fIXGetSelectedExtensionEvents\fP
+can generate a \fIBadWindow\fP error.
+.SH DIAGNOSTICS
+.TP 12
+\fIBadWindow\fP
+A value for a Window argument does not name a defined Window.
+.TP 12
+\fIBadClass\fP
+A value for an XEventClass argument is invalid.
+.SH "SEE ALSO"
+.br
+\fI\*(xL\fP
diff --git a/man/XSendExtensionEvent.man b/man/XSendExtensionEvent.man
new file mode 100644
index 0000000..ad66beb
--- /dev/null
+++ b/man/XSendExtensionEvent.man
@@ -0,0 +1,149 @@
+.\"
+.\" Copyright ([\d,\s]*) by Hewlett-Packard Company, Ardent Computer,
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this documentation
+.\" for any purpose and without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\" Ardent, and Hewlett-Packard make no representations about the
+.\" suitability for any purpose of the information in this document. It is
+.\" provided \`\`as is'' without express or implied warranty.
+.\"
+.\" $Xorg: XSExEvnt.man,v 1.4 2001/03/16 17:51:13 pookie Exp $
+.ds xL Programming with Xlib
+.TH XSendExtensionEvent 3X11 "Release 6.6" "X Version 11" "X FUNCTIONS"
+.SH NAME
+XSendExtensionEvent \- send input extension events to a client
+.SH SYNTAX
+Status XSendExtensionEvent\^(\^\fIdisplay\fP, \fIdevice\fP\^, \fIdestination\fP\^, \fIpropagate\fP\^, \fIevent_count\fP\^, \fIevent_list\fP\^, \fIevent_send\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ XDevice *\fIdevice\fP\^;
+.br
+ Window \fIdestination\fP\^;
+.br
+ Bool \fIpropagate\fP\^;
+.br
+ int \fIevent_count\fP\^;
+.br
+ XEventClass *\fIevent_list\fP\^;
+.br
+ XEvent *\fIevent_send\fP\^;
+.SH ARGUMENTS
+.TP 12
+.I display
+Specifies the connection to the X server.
+.TP 12
+.I device
+Specifies the device from which the events are to be sent.
+.TP 12
+.I destination
+Specifies the window the event is to be sent to. You can pass window id,
+\fIPointerWindow\fP, \
+or \
+\fIInputFocus\fP.
+.TP 12
+.I propagate
+Specifies a Boolean value that is either True or False.
+.TP 12
+.I event_count
+Specifies the count of XEventClasses in event_list.
+.TP 12
+.I event_list
+Specifies the list of event selections to be used.
+.TP 12
+.I event_send
+Specifies a pointer to the event that is to be sent.
+.TP 12
+.SH DESCRIPTION
+The
+\fIXSendExtensionEvent\fP
+request identifies the destination window,
+determines which clients should receive the specified events,
+and ignores any active grabs.
+This request requires you to pass an event class list.
+For a discussion of the valid event class names,
+see \fIXOpenDevice(3X11)\fP.
+This request uses the w argument to identify the destination window as follows:
+.IP \(bu 5
+If w is
+\fIPointerWindow\fP ,
+the destination window is the window that contains the pointer.
+.IP \(bu 5
+If w is
+\fIInputFocus\fP
+and if the focus window contains the pointer,
+the destination window is the window that contains the pointer;
+otherwise, the destination window is the focus window.
+.LP
+To determine which clients should receive the specified events,
+\fIXSendExtensionEvent\fP
+uses the propagate argument as follows:
+.IP \(bu 5
+If event_list is the empty set,
+the event is sent to the client that created the destination window.
+If that client no longer exists,
+no event is sent.
+.IP \(bu 5
+If propagate is
+\fIFalse\fP,
+the event is sent to every client selecting on destination any of the event
+types specified by the event_list array.
+.IP \(bu 5
+If propagate is
+\fITrue\fP
+and no clients have selected on destination any of
+the events specified by the event_list array,
+the destination is replaced with the
+closest ancestor of destination for which some client has selected a
+type specified by the event-list array and for which no intervening
+window has that type in its
+do-not-propagate-mask.
+If no such window exists or if the window is
+an ancestor of the focus window and
+\fIInputFocus\fP
+was originally specified
+as the destination, the event is not sent to any clients.
+Otherwise, the event is reported to every client selecting on the final
+destination any of the events specified in the event_list array.
+.LP
+The event in the
+\fIXEvent\fP
+structure must be one of the events defined by the input extension (or a
+\fIBadValue\fP
+error results) so that the X server can correctly byte-swap
+the contents as necessary.
+The contents of the event are
+otherwise unaltered and unchecked by the X server except to force send_event to
+\fITrue\fP
+in the forwarded event and to set the serial number in the event correctly.
+.LP
+\fIXSendExtensionEvent\fP
+returns zero if the conversion to wire protocol format failed
+and returns nonzero otherwise.
+\fIXSendExtensionEvent\fP
+can generate
+\fIBadClass\fP,
+\fIBadDevice\fP,
+\fIBadValue\fP,
+and
+\fIBadWindow\fP
+errors.
+.SH DIAGNOSTICS
+.TP 12
+\fIBadDevice\fP
+An invalid device was specified. The specified device does not exist or has
+not been opened by this client via \fIXOpenInputDevice\fP. This error may
+also occur if the specified device is the X keyboard or X pointer device.
+.TP 12
+\fIBadValue\fP
+Some numeric value falls outside the range of values accepted by the request.
+Unless a specific range is specified for an argument, the full range defined
+by the argument's type is accepted. Any argument defined as a set of
+alternatives can generate this error.
+.TP 12
+\fIBadWindow\fP
+A value for a Window argument does not name a defined Window.
+.SH "SEE ALSO"
+.br
+\fI\*(xL\fP
diff --git a/man/XSetDeviceButtonMapping.man b/man/XSetDeviceButtonMapping.man
new file mode 100644
index 0000000..e6635db
--- /dev/null
+++ b/man/XSetDeviceButtonMapping.man
@@ -0,0 +1,113 @@
+.\"
+.\" Copyright ([\d,\s]*) by Hewlett-Packard Company, Ardent Computer,
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this documentation
+.\" for any purpose and without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\" Ardent, and Hewlett-Packard make no representations about the
+.\" suitability for any purpose of the information in this document. It is
+.\" provided \`\`as is'' without express or implied warranty.
+.\"
+.\" $Xorg: XSeBMap.man,v 1.4 2001/03/16 17:51:13 pookie Exp $
+.ds xL Programming With Xlib
+.TH XSetDeviceButtonMapping 3X11 "Release 6.6" "X Version 11" "X FUNCTIONS"
+.SH NAME
+XSetDeviceButtonMapping, XGetDeviceButtonMapping \- query or change device button mappings
+.SH SYNTAX
+int XSetDeviceButtonMapping\^(\^\fIdisplay\fP, \fIdevice\fP, \fImap\fP, \fInmap\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ XDevice *\fIdevice\fP\^;
+.br
+ unsigned char \fImap\fP\^[]\^;
+.br
+ int \fInmap\fP\^;
+.sp
+int XGetDeviceButtonMapping\^(\^\fIdisplay\fP, \fIdevice\fP, \fImap_return\fP,
+\fInmap\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ XDevice *\fIdevice\fP\^;
+.br
+ unsigned char \fImap_return\fP\^[]\^;
+.br
+ int \fInmap\fP\^;
+.SH ARGUMENTS
+.TP 12
+.I display
+Specifies the connection to the X server.
+.TP 12
+.I device
+Specifies the device whose button mapping is to be queried or changed.
+.TP 12
+.I map
+Specifies the mapping list.
+.TP 12
+.I map_return
+Returns the mapping list.
+.TP 12
+.I nmap
+Specifies the number of items in the mapping list.
+.SH DESCRIPTION
+The \fIXSetDeviceButtonMapping\fP
+request sets the mapping of the specified device.
+If it succeeds, the X server generates a
+\fIDeviceMappingNotify\fP event, and
+\fIXSetDeviceButtonMapping\fP returns \fIMappingSuccess\fP.
+Element map[i] defines the logical button number for the physical button
+i+1.
+The length of the list must be the same as
+\fIXGetDeviceButtonMapping\fP
+would return, or a \fIBadValue\fP
+error results.
+A zero element disables a button, and elements are not restricted in
+value by the number of physical buttons.
+However, no two elements can have the same nonzero value,
+or a \fIBadValue\fP error results.
+If any of the buttons to be altered are logically in the down state,
+\fIXSetDeviceButtonMapping\fP returns \fIMappingBusy\fP,
+and the mapping is not changed.
+.LP
+\fIXSetDeviceButtonMapping\fP
+can generate \fIBadDevice\fP, \fIBadMatch\fP, and \fIBadValue\fP errors.
+.LP
+The \fIXGetDeviceButtonMapping\fP
+request returns the current mapping of the specified device.
+Buttons are numbered starting from one.
+\fIXGetDeviceButtonMapping\fP
+returns the number of physical buttons actually on the device.
+The nominal mapping for a device is map[i]=i+1.
+The nmap argument specifies the length of the array where the device
+mapping is returned, and only the first nmap elements are returned
+in map_return.
+.LP
+\fIXGetDeviceButtonMapping\fP
+can generate \fIBadDevice\fP or \fIBadMatch\fP errors.
+.SH DIAGNOSTICS
+.TP 12
+\fIBadDevice\fP
+An invalid device was specified. The specified device does not exist or has
+not been opened by this client via \fIXOpenInputDevice\fP. This error may
+also occur if the specified device is the X keyboard or X pointer device.
+.TP 12
+\fIBadMatch\fP
+This error may occur if an \fIXGetDeviceButtonMapping\fP or
+\fIXSetDeviceButtonMapping\fP request was made
+specifying a device that has no buttons.
+.TP 12
+\fIBadValue\fP
+Some numeric value falls outside the range of values accepted by the request.
+Unless a specific range is specified for an argument, the full range defined
+by the argument's type is accepted. Any argument defined as a set of
+alternatives can generate this error.
+.SH "SEE ALSO"
+XChangeDeviceKeyboardControl(3X),
+.br
+XChangeDeviceKeyMapping(3X)
+.br
+XChangeDeviceModifierMapping(3X)
+.br
+.br
+\fI\*(xL\fP
diff --git a/man/XSetDeviceFocus.man b/man/XSetDeviceFocus.man
new file mode 100644
index 0000000..b07764b
--- /dev/null
+++ b/man/XSetDeviceFocus.man
@@ -0,0 +1,216 @@
+.\"
+.\" Copyright ([\d,\s]*) by Hewlett-Packard Company, Ardent Computer,
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this documentation
+.\" for any purpose and without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\" Ardent, and Hewlett-Packard make no representations about the
+.\" suitability for any purpose of the information in this document. It is
+.\" provided \`\`as is'' without express or implied warranty.
+.\"
+.\" $Xorg: XSeDvFoc.man,v 1.4 2001/03/16 17:51:13 pookie Exp $
+.ds xL Programming with Xlib
+.TH XSetDeviceFocus 3X11 "Release 6.6" "X Version 11" "X FUNCTIONS"
+.SH NAME
+XSetDeviceFocus, XGetDeviceFocus \- control extension input device focus
+.SH SYNTAX
+XSetDeviceFocus\^(\^\fIdisplay\fP, \fIdevice\fP\^, \fIfocus\fP\^, \fIrevert_to\fP\^, \fItime\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Display *\fIdevice\fP\^;
+.br
+ Window \fIfocus\fP\^;
+.br
+ int \fIrevert_to\fP\^;
+.br
+ Time \fItime\fP\^;
+.sp
+XGetDeviceFocus\^(\^\fIdisplay\fP, \fIdevice\fP\^, \fIfocus_return\fP\^,
+\fIrevert_to_return\fP, \fItime_return\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Display *\fIdevice\fP\^;
+.br
+ Window *\fIfocus_return\fP\^;
+.br
+ int *\fIrevert_to_return\fP\^;
+.br
+ int *\fItime_return\fP\^;
+.SH ARGUMENTS
+.TP 12
+.I display
+Specifies the connection to the X server.
+.TP 12
+.I device
+Specifies the device whose focus is to be queried or changed.
+.TP 12
+.I focus
+Specifies the window,
+\fIPointerRoot\fP,
+\fIFollowKeyboard\fP,
+or
+\fINone\fP.
+.TP 12
+.I focus_return
+Returns the focus window,
+\fIPointerRoot\fP,
+\fIFollowKeyboard\fP,
+or
+\fINone\fP.
+.TP 12
+.I revert_to
+Specifies where the input focus reverts to if the window becomes not
+viewable.
+You can pass
+\fIRevertToParent\fP,
+\fIRevertToPointerRoot\fP,
+\fIRevertToFollowKeyboard\fP,
+or
+\fIRevertToNone\fP.
+.TP 12
+.I revert_to_return
+Returns the current focus state
+\fIRevertToParent\fP,
+\fIRevertToPointerRoot\fP,
+\fIRevertToFollowKeyboard\fP,
+or
+\fIRevertToNone\fP.
+.TP 12
+.I time_return
+Returns the last_focus_time for the device.
+.TP 12
+.I time
+Specifies the time.
+You can pass either a timestamp or
+\fICurrentTime\fP.
+.SH DESCRIPTION
+The \fIXSetDeviceFocus\fP
+request changes the focus of the specified device and its last-focus-change
+time.
+It has no effect if the specified time is earlier than the current
+last-focus-change time or is later than the current X server time.
+Otherwise, the last-focus-change time is set to the specified time
+\fICurrentTime\fP
+is replaced by the current X server time).
+\fIXSetDeviceFocus\fP
+causes the X server to generate
+\fIDeviceFocusIn\fP
+and
+\fIDeviceFocusOut\fP
+events.
+.LP
+Depending on the focus argument,
+the following occurs:
+.IP \(bu 5
+If focus is
+\fINone\fP ,
+all device events are discarded until a new focus window is set,
+and the revert_to argument is ignored.
+.IP \(bu 5
+If focus is a window,
+it becomes the device's focus window.
+If a generated device event would normally be reported to this window
+or one of its inferiors, the event is reported as usual.
+Otherwise, the event is reported relative to the focus window.
+.IP \(bu 5
+If focus is
+\fIPointerRoot\fP,
+the focus window is dynamically taken to be the root window of whatever screen
+the pointer is on at each event from the specified device.
+In this case, the revert_to argument is ignored.
+.IP \(bu 5
+If focus is
+\fIFollowKeyboard\fP,
+the focus window is dynamically taken to be the window to which the X keyboard
+focus is set at each input event.
+.LP
+The specified focus window must be viewable at the time
+\fIXSetDeviceFocus\fP
+is called,
+or a
+\fIBadMatch\fP
+error results.
+If the focus window later becomes not viewable,
+the X server
+evaluates the revert_to argument to determine the new focus window as follows:
+.IP \(bu 5
+If revert_to is
+\fIRevertToParent\fP,
+the focus reverts to the parent (or the closest viewable ancestor),
+and the new revert_to value is taken to be
+\fIRevertToNone\fP.
+.IP \(bu 5
+If revert_to is
+\fIRevertToPointerRoot\fP,
+\fIRevertToFollowKeyboard\fP,
+or
+\fIRevertToNone\fP,
+the focus reverts to
+\fIPointerRoot\fP,
+\fIFollowKeyboard\fP,
+or
+\fINone\fP,
+respectively.
+.LP
+When the focus reverts,
+the X server generates
+\fIDeviceFocusIn\fP
+and
+\fIDeviceFocusOut\fP
+events, but the last-focus-change time is not affected.
+.LP
+Input extension devices are not required to support the ability to be focused.
+Attempting to set the focus of a device that does not support this request
+will result in a \fIBadMatch\fP error. Whether or not given device can
+support this request can be determined by the information returned by
+\fIXOpenDevice\fP.
+For those devices that
+support focus, \fIXOpenDevice\fP will return an
+\fIXInputClassInfo\fP structure with the input_class field
+equal to the constant \fIFocusClass\fP (defined in the file \fIXI.h\fP).
+.LP
+\fIXSetDeviceFocus\fP
+can generate
+\fIBadDevice\fP,
+\fIBadMatch\fP,
+\fIBadValue\fP,
+and
+\fIBadWindow\fP
+errors.
+.LP
+The
+\fIXGetDeviceFocus\fP
+request returns the focus window and the current focus state.
+.LP
+Not all input extension devices can be focused. Attempting to query the
+focus state of a device that can't be focused results in a \fIBadMatch\fP
+error. A device that can be focused returns information for input Class
+Focus when an \fIXOpenDevice\fP request is made.
+.LP
+\fIXGetDeviceFocus\fP can generate \fIBadDevice\fP,
+and \fIBadMatch\fP errors.
+.SH DIAGNOSTICS
+.TP 12
+\fIBadDevice\fP
+An invalid device was specified. The specified device does not exist or has
+not been opened by this client via \fIXOpenInputDevice\fP. This error may
+also occur if the specified device is the X keyboard or X pointer device.
+.TP 12
+\fIBadValue\fP
+Some numeric value falls outside the range of values accepted by the request.
+Unless a specific range is specified for an argument, the full range defined
+by the argument's type is accepted. Any argument defined as a set of
+alternatives can generate this error.
+.TP 12
+\fIBadWindow\fP
+A value for a Window argument does not name a defined Window.
+.TP 12
+\fIBadMatch\fP
+This error may occur if an \fIXGetDeviceFocus\fP or \fIXSetDeviceFocus\fP
+request was made specifying a device that the server implementation does not
+allow to be focused.
+.SH "SEE ALSO"
+.br
+\fI\*(xL\fP
diff --git a/man/XSetDeviceMode.man b/man/XSetDeviceMode.man
new file mode 100644
index 0000000..0f30233
--- /dev/null
+++ b/man/XSetDeviceMode.man
@@ -0,0 +1,69 @@
+.\"
+.\" Copyright ([\d,\s]*) by Hewlett-Packard Company, Ardent Computer,
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this documentation
+.\" for any purpose and without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\" Ardent, and Hewlett-Packard make no representations about the
+.\" suitability for any purpose of the information in this document. It is
+.\" provided \`\`as is'' without express or implied warranty.
+.\"
+.\" $Xorg: XSetMode.man,v 1.4 2001/03/16 17:51:13 pookie Exp $
+.ds xL Programming with Xlib
+.TH XSetDeviceMode 3X11 "Release 6.6" "X Version 11" "X FUNCTIONS"
+.SH NAME
+XSetDeviceMode \- change the mode of a device
+.SH SYNTAX
+XSetDeviceMode\^(\^\fIdisplay\fP, \fIdevice\fP\^, \fImode\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ XDevice *\fIdevice\fP\^;
+.br
+ int \fI_mode\fP\^;
+.SH ARGUMENTS
+.TP 12
+.I display
+Specifies the connection to the X server.
+.TP 12
+.I device
+Specifies the device whose mode is to be changed.
+.TP 12
+.I mode
+Specifies the mode.
+You can pass
+\fIAbsolute\fP ,
+or
+\fIRelative\fP.
+.SH DESCRIPTION
+The
+\fIXSetDeviceMode\fP
+request changes the mode of an input device that is capable of reporting
+either absolute positional information or relative motion information.
+Not all input devices are capable of reporting motion data, and not
+all are capable of changing modes from \fIAbsolute\fP to \fIRelative\fP.
+.LP
+\fIXSetDeviceMode\fP
+can generate a \fIBadDevice\fP or
+\fIBadMode\fP
+error.
+.SH DIAGNOSTICS
+.TP 12
+\fIBadDevice\fP
+An invalid device was specified. The specified device does not exist or has
+not been opened by this client via \fIXOpenInputDevice\fP. This error may
+also occur if some other client has caused the specified device to become
+the X keyboard or X pointer device via the \fIXChangeKeyboardDevice\fP or
+\fIXChangePointerDevice\fP requests.
+.TP 12
+\fIBadMatch\fP
+This error may occur if an \fIXSetDeviceMode\fP request is made
+specifying a device that has no valuators and reports no axes of motion.
+.TP 12
+\fIBadMode\fP
+An invalid mode was specified. This error will also be returned if the
+specified device is not capable of supporting the \fIXSetDeviceMode\fP
+request.
+.SH "SEE ALSO"
+.br
+\fI\*(xL\fP
diff --git a/man/XSetDeviceValuators.man b/man/XSetDeviceValuators.man
new file mode 100644
index 0000000..1b3a054
--- /dev/null
+++ b/man/XSetDeviceValuators.man
@@ -0,0 +1,79 @@
+.\"
+.\" Copyright ([\d,\s]*) by Hewlett-Packard Company, Ardent Computer,
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this documentation
+.\" for any purpose and without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\" Ardent, and Hewlett-Packard make no representations about the
+.\" suitability for any purpose of the information in this document. It is
+.\" provided \`\`as is'' without express or implied warranty.
+.\"
+.\" $Xorg: XSetDVal.man,v 1.4 2001/03/16 17:51:13 pookie Exp $
+.ds xL Programming with Xlib
+.TH XSetDeviceValuators 3X11 "Release 6.6" "X Version 11" "X FUNCTIONS"
+.SH NAME
+XSetDeviceValuators \- initialize the valuators on an extension input device
+.SH SYNTAX
+XSetDeviceValuators\^(\^\fIdisplay\fP, \fIdevice\fP\^, \fIvaluators\fP\^, \fIfirst_valuator\fP\^, \fInum_valuators\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ XDevice *\fIdevice\fP\^;
+.br
+ int *\fIvaluators\fP\^;
+.br
+ int \fIfirst_valuator\fP\^;
+.br
+ int \fInum_valuators\fP\^;
+.SH ARGUMENTS
+.TP 12
+.I display
+Specifies the connection to the X server.
+.TP 12
+.I device
+Specifies the device whose valuators are to be initialized.
+.TP 12
+.I valuators
+Specifies a pointer to an array of integer values to be used to initialize the
+device valuators.
+.TP 12
+.I first_valuator
+Specifies the first valuator to be set. Valuators are numbered beginning with
+zero.
+.TP 12
+.I num_valuators
+Specifies the number of valuators to be set.
+.SH DESCRIPTION
+The
+\fIXSetDeviceValuators\fP
+request sets the current values of the valuators of an input device.
+The valuators in the range
+first_valuator to (first_valuator + num_valuators)
+are set to the specified values. Valuators are numbered beginning with 0.
+Not all input devices support initialization of valuator values. If this
+request is made to a device that does not support valuators initialization,
+a \fIBadMatch\fP error will occur.
+.LP
+If the request succeeds, a status of Success is returned. If another
+client has the device grabbed, a status of AlreadyGrabbed is returned.
+.LP
+\fIXSetDeviceValuators\fP
+can generate a \fIBadLength\fP, \fIBadDevice\fP , \fIBadMatch\fP, or
+\fIBadValue\fP error.
+.SH DIAGNOSTICS
+.TP 12
+\fIBadDevice\fP
+An invalid device was specified. The specified device does not exist or has
+not been opened by this client via \fIXOpenInputDevice\fP.
+.TP 12
+\fIBadMatch\fP
+This error may occur if an \fIXSetDeviceValuators\fP request is made
+specifying a device that has no valuators and reports no axes of motion,
+or if such a request is made specifying a device that does not support
+valuator initialization.
+.TP 12
+\fIBadValue\fP
+An invalid first_valuator or num_valuators values was specified.
+.SH "SEE ALSO"
+.br
+\fI\*(xL\fP
diff --git a/src/XAllowDv.c b/src/XAllowDv.c
new file mode 100644
index 0000000..200bb4b
--- /dev/null
+++ b/src/XAllowDv.c
@@ -0,0 +1,86 @@
+/* $Xorg: XAllowDv.c,v 1.4 2001/02/09 02:03:50 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XAllowDeviceEvents - Thaw a frozen extension device.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+int
+XAllowDeviceEvents (dpy, dev, event_mode, time)
+ register Display *dpy;
+ XDevice *dev;
+ int event_mode;
+ Time time;
+ {
+ xAllowDeviceEventsReq *req;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return (NoSuchExtension);
+
+ GetReq(AllowDeviceEvents,req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_AllowDeviceEvents;
+ req->deviceid = dev->device_id;
+ req->mode = event_mode;
+ req->time = time;
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (Success);
+ }
+
diff --git a/src/XChgDCtl.c b/src/XChgDCtl.c
new file mode 100644
index 0000000..038136a
--- /dev/null
+++ b/src/XChgDCtl.c
@@ -0,0 +1,128 @@
+/* $Xorg: XChgDCtl.c,v 1.4 2001/02/09 02:03:50 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XChangeDeviceControl - Change the control attributes of an extension
+ * input device.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+int
+XChangeDeviceControl (dpy, dev, control, d)
+ register Display *dpy;
+ XDevice *dev;
+ int control;
+ XDeviceControl *d;
+ {
+ int length;
+ xChangeDeviceControlReq *req;
+ xChangeDeviceControlReply rep;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Add_XChangeDeviceControl) == -1)
+ return (NoSuchExtension);
+
+ GetReq(ChangeDeviceControl,req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_ChangeDeviceControl;
+ req->deviceid = dev->device_id;
+ req->control = control;
+
+ switch (control)
+ {
+ case DEVICE_RESOLUTION:
+ {
+ XDeviceResolutionControl *R;
+ xDeviceResolutionCtl r;
+
+ R = (XDeviceResolutionControl *) d;
+ r.control = DEVICE_RESOLUTION;
+ r.length = sizeof (xDeviceResolutionCtl) +
+ R->num_valuators * sizeof(int);
+ r.first_valuator = R->first_valuator;
+ r.num_valuators = R->num_valuators;
+ req->length += ((unsigned)(r.length + 3) >> 2);
+ length = sizeof (xDeviceResolutionCtl);
+ Data (dpy, (char *) &r, length);
+ length = r.num_valuators * sizeof(int);
+ Data (dpy, (char *) R->resolutions, length);
+ if (! _XReply (dpy, (xReply *) &rep, 0, xTrue))
+ {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (NoSuchExtension);
+ }
+ else
+ return (rep.status);
+ }
+ default:
+ {
+ xDeviceCtl u;
+
+ u.control = d->control;
+ u.length = d->length - sizeof (int);
+ length = ((unsigned)(u.length + 3) >> 2);
+ req->length += length;
+ length <<= 2;
+ Data (dpy, (char *) &u, length);
+ }
+ }
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (Success);
+ }
+
diff --git a/src/XChgFCtl.c b/src/XChgFCtl.c
new file mode 100644
index 0000000..75fe93c
--- /dev/null
+++ b/src/XChgFCtl.c
@@ -0,0 +1,205 @@
+/* $Xorg: XChgFCtl.c,v 1.4 2001/02/09 02:03:50 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XChangeFeedbackControl - Change the control attributes of feedbacks on
+ * an extension device.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+int
+XChangeFeedbackControl (dpy, dev, mask, f)
+ register Display *dpy;
+ XDevice *dev;
+ unsigned long mask;
+ XFeedbackControl *f;
+ {
+ int length;
+ xChangeFeedbackControlReq *req;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return (NoSuchExtension);
+
+ GetReq(ChangeFeedbackControl,req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_ChangeFeedbackControl;
+ req->deviceid = dev->device_id;
+ req->mask = mask;
+ req->feedbackid = f->class;
+
+ if (f->class == KbdFeedbackClass)
+ {
+ XKbdFeedbackControl *K;
+ xKbdFeedbackCtl k;
+
+ K = (XKbdFeedbackControl *) f;
+ k.class = KbdFeedbackClass;
+ k.length = sizeof (xKbdFeedbackCtl);
+ k.id = K->id;
+ k.click = K->click;
+ k.percent = K->percent;
+ k.pitch = K->pitch;
+ k.duration = K->duration;
+ k.led_mask = K->led_mask;
+ k.led_values = K->led_value;
+ k.key = K->key;
+ k.auto_repeat_mode = K->auto_repeat_mode;
+ length = ((unsigned)(k.length + 3) >> 2);
+ req->length += length;
+ length <<= 2;
+ Data (dpy, (char *) &k, length);
+ }
+ else if (f->class == PtrFeedbackClass)
+ {
+ XPtrFeedbackControl *P;
+ xPtrFeedbackCtl p;
+
+ P = (XPtrFeedbackControl *) f;
+ p.class = PtrFeedbackClass;
+ p.length = sizeof (xPtrFeedbackCtl);
+ p.id = P->id;
+ p.num = P->accelNum;
+ p.denom = P->accelDenom;
+ p.thresh = P->threshold;
+ length = ((unsigned)(p.length + 3) >> 2);
+ req->length += length;
+ length <<= 2;
+ Data (dpy, (char *) &p, length);
+ }
+ else if (f->class == IntegerFeedbackClass)
+ {
+ XIntegerFeedbackControl *I;
+ xIntegerFeedbackCtl i;
+
+ I = (XIntegerFeedbackControl *) f;
+ i.class = IntegerFeedbackClass;
+ i.length = sizeof (xIntegerFeedbackCtl);
+ i.id = I->id;
+ i.int_to_display = I->int_to_display;
+ length = ((unsigned)(i.length + 3) >> 2);
+ req->length += length;
+ length <<= 2;
+ Data (dpy, (char *) &i, length);
+ }
+ else if (f->class == StringFeedbackClass)
+ {
+ XStringFeedbackControl *S;
+ xStringFeedbackCtl s;
+
+ S = (XStringFeedbackControl *) f;
+ s.class = StringFeedbackClass;
+ s.length = sizeof (xStringFeedbackCtl) +
+ (S->num_keysyms * sizeof (KeySym));
+ s.id = S->id;
+ s.num_keysyms = S->num_keysyms;
+ req->length += ((unsigned)(s.length + 3) >> 2);
+ length = sizeof (xStringFeedbackCtl);
+ Data (dpy, (char *) &s, length);
+ length = (s.num_keysyms * sizeof (KeySym));
+ Data (dpy, (char *) S->syms_to_display, length);
+ }
+ else if (f->class == BellFeedbackClass)
+ {
+ XBellFeedbackControl *B;
+ xBellFeedbackCtl b;
+
+ B = (XBellFeedbackControl *) f;
+ b.class = BellFeedbackClass;
+ b.length = sizeof (xBellFeedbackCtl);
+ b.id = B->id;
+ b.percent = B->percent;
+ b.pitch = B->pitch;
+ b.duration = B->duration;
+ length = ((unsigned)(b.length + 3) >> 2);
+ req->length += length;
+ length <<= 2;
+ Data (dpy, (char *) &b, length);
+ }
+ else if (f->class == LedFeedbackClass)
+ {
+ XLedFeedbackControl *L;
+ xLedFeedbackCtl l;
+
+ L = (XLedFeedbackControl *) f;
+ l.class = LedFeedbackClass;
+ l.length = sizeof (xLedFeedbackCtl);
+ l.id = L->id;
+ l.led_mask = L->led_mask;
+ l.led_values = L->led_values;
+ length = ((unsigned)(l.length + 3) >> 2);
+ req->length += length;
+ length <<= 2;
+ Data (dpy, (char *) &l, length);
+ }
+ else
+ {
+ xFeedbackCtl u;
+
+ u.class = f->class;
+ u.length = f->length - sizeof (int);
+ u.id = f->id;
+ length = ((unsigned)(u.length + 3) >> 2);
+ req->length += length;
+ length <<= 2;
+ Data (dpy, (char *) &u, length);
+ }
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (Success);
+ }
+
diff --git a/src/XChgKMap.c b/src/XChgKMap.c
new file mode 100644
index 0000000..74c1481
--- /dev/null
+++ b/src/XChgKMap.c
@@ -0,0 +1,92 @@
+/* $Xorg: XChgKMap.c,v 1.4 2001/02/09 02:03:50 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XChangeDeviceKeyMapping - change the keymap of an extension device.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+int
+XChangeDeviceKeyMapping (dpy, dev, first, syms_per_code, keysyms, count)
+ register Display *dpy;
+ XDevice *dev;
+ int first;
+ int syms_per_code;
+ KeySym *keysyms;
+ int count;
+ {
+ register long nbytes;
+ xChangeDeviceKeyMappingReq *req;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return (NoSuchExtension);
+
+ GetReq(ChangeDeviceKeyMapping,req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_ChangeDeviceKeyMapping;
+ req->deviceid = dev->device_id;
+ req->firstKeyCode = first;
+ req->keyCodes = count;
+ req->keySymsPerKeyCode = syms_per_code;
+ req->length += count * syms_per_code;
+ nbytes = syms_per_code * count * sizeof (CARD32);
+ Data (dpy, (char *)keysyms, nbytes);
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (Success);
+ }
diff --git a/src/XChgKbd.c b/src/XChgKbd.c
new file mode 100644
index 0000000..089f124
--- /dev/null
+++ b/src/XChgKbd.c
@@ -0,0 +1,86 @@
+/* $Xorg: XChgKbd.c,v 1.4 2001/02/09 02:03:50 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XChangeKeyboardDevice - Change the device used as the X keyboard.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+int
+XChangeKeyboardDevice (dpy, dev)
+ register Display *dpy;
+ XDevice *dev;
+ {
+ xChangeKeyboardDeviceReq *req;
+ xChangeKeyboardDeviceReply rep;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return (NoSuchExtension);
+
+ GetReq(ChangeKeyboardDevice,req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_ChangeKeyboardDevice;
+ req->deviceid = dev->device_id;
+ rep.status = Success;
+
+ (void) _XReply (dpy, (xReply *) &rep, 0, xTrue);
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (rep.status);
+ }
+
diff --git a/src/XChgPnt.c b/src/XChgPnt.c
new file mode 100644
index 0000000..e1dbb1e
--- /dev/null
+++ b/src/XChgPnt.c
@@ -0,0 +1,90 @@
+/* $Xorg: XChgPnt.c,v 1.4 2001/02/09 02:03:50 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XChangePointerDevice - Change the device used as the X Pointer.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+int
+XChangePointerDevice (dpy, dev, xaxis, yaxis)
+ register Display *dpy;
+ XDevice *dev;
+ int xaxis;
+ int yaxis;
+ {
+ xChangePointerDeviceReq *req;
+ xChangePointerDeviceReply rep;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return (NoSuchExtension);
+
+ GetReq(ChangePointerDevice,req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_ChangePointerDevice;
+ req->deviceid = dev->device_id;
+ req->xaxis = xaxis;
+ req->yaxis = yaxis;
+ rep.status = Success;
+
+ (void) _XReply (dpy, (xReply *) &rep, 0, xTrue);
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (rep.status);
+ }
+
diff --git a/src/XChgProp.c b/src/XChgProp.c
new file mode 100644
index 0000000..2426759
--- /dev/null
+++ b/src/XChgProp.c
@@ -0,0 +1,96 @@
+/* $Xorg: XChgProp.c,v 1.4 2001/02/09 02:03:50 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XChangeDeviceDontPropagateList - Get the dont_propagate_list for a
+ * window.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+int
+XChangeDeviceDontPropagateList (dpy, window, count, events, mode)
+ register Display *dpy;
+ Window window;
+ int count;
+ XEventClass *events;
+ int mode;
+ {
+ xChangeDeviceDontPropagateListReq *req;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return (NoSuchExtension);
+
+ GetReq(ChangeDeviceDontPropagateList,req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_ChangeDeviceDontPropagateList;
+ req->window = window;
+ req->count = count;
+ req->mode = mode;
+ req->length += count;
+
+ /* note: Data is a macro that uses its arguments multiple
+ times, so "nvalues" is changed in a separate assignment
+ statement */
+
+ count <<= 2;
+ Data32 (dpy, (long *) events, count);
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (Success);
+ }
+
diff --git a/src/XCloseDev.c b/src/XCloseDev.c
new file mode 100644
index 0000000..f4da25e
--- /dev/null
+++ b/src/XCloseDev.c
@@ -0,0 +1,83 @@
+/* $Xorg: XCloseDev.c,v 1.4 2001/02/09 02:03:50 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XCloseDevice - Request the server to close an extension device.
+ *
+ */
+
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XI.h"
+#include "XInput.h"
+#include "extutil.h"
+
+int
+XCloseDevice(dpy, dev)
+ register Display *dpy;
+ register XDevice *dev;
+ {
+ xCloseDeviceReq *req;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return (NoSuchExtension);
+
+ GetReq(CloseDevice,req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_CloseDevice;
+ req->deviceid = dev->device_id;
+
+ XFree ((char *)dev);
+ UnlockDisplay (dpy);
+ SyncHandle();
+ return (Success);
+ }
+
diff --git a/src/XDevBell.c b/src/XDevBell.c
new file mode 100644
index 0000000..b352a06
--- /dev/null
+++ b/src/XDevBell.c
@@ -0,0 +1,87 @@
+/* $Xorg: XDevBell.c,v 1.4 2001/02/09 02:03:50 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XDeviceBell - Ring a bell on an extension device.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+int
+XDeviceBell (dpy, dev, feedbackclass, feedbackid, percent)
+ register Display *dpy;
+ XDevice *dev;
+ XID feedbackclass, feedbackid;
+ int percent;
+ {
+ xDeviceBellReq *req;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Add_XDeviceBell) == -1)
+ return (NoSuchExtension);
+
+ GetReq(DeviceBell,req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_DeviceBell;
+ req->deviceid = dev->device_id;
+ req->feedbackclass = feedbackclass;
+ req->feedbackid = feedbackid;
+ req->percent = percent;
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (Success);
+ }
+
diff --git a/src/XExtInt.c b/src/XExtInt.c
new file mode 100644
index 0000000..b8da8a0
--- /dev/null
+++ b/src/XExtInt.c
@@ -0,0 +1,660 @@
+/* $Xorg: XExtInt.c,v 1.4 2001/02/09 02:03:50 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * Input Extension library internal functions.
+ *
+ */
+
+#define NEED_EVENTS
+#define NEED_REPLIES
+#include <stdio.h>
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+#define ENQUEUE_EVENT True
+#define DONT_ENQUEUE False
+
+static XExtensionInfo *xinput_info;
+static /* const */ char *xinput_extension_name = INAME;
+static int XInputClose();
+static char *XInputError();
+static Bool XInputWireToEvent();
+Status _XiEventToWire();
+static /* const */ XEvent emptyevent;
+
+typedef struct _XInputData
+ {
+ XEvent data;
+ XExtensionVersion *vers;
+ } XInputData;
+
+#define XInputCheckExtension(dpy,i,val) \
+ XextCheckExtension (dpy, i, xinput_extension_name, val)
+
+static /* const */ XExtensionHooks xinput_extension_hooks = {
+ NULL, /* create_gc */
+ NULL, /* copy_gc */
+ NULL, /* flush_gc */
+ NULL, /* free_gc */
+ NULL, /* create_font */
+ NULL, /* free_font */
+ XInputClose, /* close_display */
+ XInputWireToEvent, /* wire_to_event */
+ _XiEventToWire, /* event_to_wire */
+ NULL, /* error */
+ XInputError, /* error_string */
+};
+
+static char *XInputErrorList[] = {
+ "BadDevice, invalid or uninitialized input device", /* BadDevice */
+ "BadEvent, invalid event type", /* BadEvent */
+ "BadMode, invalid mode parameter", /* BadMode */
+ "DeviceBusy, device is busy", /* DeviceBusy */
+ "BadClass, invalid event class", /* BadClass */
+};
+
+XEXT_GENERATE_FIND_DISPLAY (XInput_find_display, xinput_info,
+ xinput_extension_name, &xinput_extension_hooks, IEVENTS, NULL)
+
+static XEXT_GENERATE_ERROR_STRING (XInputError, xinput_extension_name,
+ IERRORS, XInputErrorList)
+/*******************************************************************
+ *
+ * Input extension versions.
+ *
+ */
+
+static XExtensionVersion versions[] = {{XI_Absent,0,0},
+ {XI_Present, XI_Initial_Release_Major, XI_Initial_Release_Minor},
+ {XI_Present, XI_Add_XDeviceBell_Major, XI_Add_XDeviceBell_Minor},
+ {XI_Present, XI_Add_XSetDeviceValuators_Major,
+ XI_Add_XSetDeviceValuators_Minor},
+ {XI_Present, XI_Add_XChangeDeviceControl_Major,
+ XI_Add_XChangeDeviceControl_Minor}};
+
+/***********************************************************************
+ *
+ * Return errors reported by this extension.
+ *
+ */
+
+void _xibaddevice (dpy, error)
+ Display *dpy;
+ int *error;
+ {
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+ *error = info->codes->first_error + XI_BadDevice;
+ }
+
+void _xibadclass (dpy, error)
+ Display *dpy;
+ int *error;
+ {
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+ *error = info->codes->first_error + XI_BadClass;
+ }
+
+void _xibadevent (dpy, error)
+ Display *dpy;
+ int *error;
+ {
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+ *error = info->codes->first_error + XI_BadEvent;
+ }
+
+void _xibadmode (dpy, error)
+ Display *dpy;
+ int *error;
+ {
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+ *error = info->codes->first_error + XI_BadMode;
+ }
+
+void _xidevicebusy (dpy, error)
+ Display *dpy;
+ int *error;
+ {
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+ *error = info->codes->first_error + XI_DeviceBusy;
+ }
+
+/***********************************************************************
+ *
+ * Check to see if the input extension is installed in the server.
+ * Also check to see if the version is >= the requested version.
+ *
+ */
+
+_XiCheckExtInit(dpy, version_index)
+ register Display *dpy;
+ register int version_index;
+ {
+ XExtensionVersion *ext;
+ XExtDisplayInfo *info = XInput_find_display (dpy);
+
+ XInputCheckExtension (dpy, info, -1);
+
+ if (info->data == NULL)
+ {
+ info->data = (XPointer) Xmalloc (sizeof (XInputData));
+ if (!info->data)
+ {
+ UnlockDisplay(dpy);
+ return (-1);
+ }
+ ((XInputData *) info->data)->vers =
+ XGetExtensionVersion (dpy, "XInputExtension");
+ }
+
+ if (versions[version_index].major_version > Dont_Check)
+ {
+ ext = ((XInputData *) info->data)->vers;
+ if ((ext->major_version < versions[version_index].major_version) ||
+ ((ext->major_version == versions[version_index].major_version) &&
+ (ext->minor_version < versions[version_index].minor_version)))
+ {
+ UnlockDisplay(dpy);
+ return (-1);
+ }
+ }
+ return (0);
+ }
+
+/***********************************************************************
+ *
+ * Close display routine.
+ *
+ */
+
+static int
+XInputClose (dpy, codes)
+ Display *dpy;
+ XExtCodes *codes;
+ {
+ XExtDisplayInfo *info = XInput_find_display (dpy);
+
+ if(info->data != NULL) {
+ XFree((char *)((XInputData *) info->data)->vers);
+ XFree((char *)info->data);
+ }
+ return XextRemoveDisplay (xinput_info, dpy);
+ }
+
+
+static int
+Ones(mask)
+ Mask mask;
+{
+ register Mask y;
+
+ y = (mask >> 1) &033333333333;
+ y = mask - y - ((y >>1) & 033333333333);
+ return (((y + (y >> 3)) & 030707070707) % 077);
+}
+
+/***********************************************************************
+ *
+ * Handle Input extension events.
+ * Reformat a wire event into an XEvent structure of the right type.
+ *
+ */
+
+static Bool
+XInputWireToEvent (dpy, re, event)
+ Display *dpy;
+ XEvent *re;
+ xEvent *event;
+ {
+ unsigned int type, reltype;
+ unsigned int i,j;
+ XExtDisplayInfo *info = XInput_find_display (dpy);
+ XEvent *save = (XEvent *) info->data;
+
+ type = event->u.u.type & 0x7f;
+ reltype = (type - info->codes->first_event);
+
+
+
+ if (reltype != XI_DeviceValuator &&
+ reltype != XI_DeviceKeystateNotify &&
+ reltype != XI_DeviceButtonstateNotify)
+ {
+ *save = emptyevent;
+ save->type = type;
+ ((XAnyEvent *)save)->serial = _XSetLastRequestRead(dpy,
+ (xGenericReply *)event);
+ ((XAnyEvent *)save)->send_event = ((event->u.u.type & 0x80) != 0);
+ ((XAnyEvent *)save)->display = dpy;
+ }
+
+ switch (reltype)
+ {
+ case XI_DeviceMotionNotify:
+ {
+ register XDeviceMotionEvent *ev = (XDeviceMotionEvent*) save;
+ deviceKeyButtonPointer *ev2 = (deviceKeyButtonPointer *) event;
+
+ ev->root = ev2->root;
+ ev->window = ev2->event;
+ ev->subwindow = ev2->child;
+ ev->time = ev2->time;
+ ev->x_root = ev2->root_x;
+ ev->y_root = ev2->root_y;
+ ev->x = ev2->event_x;
+ ev->y = ev2->event_y;
+ ev->state = ev2->state;
+ ev->same_screen = ev2->same_screen;
+ ev->is_hint = ev2->detail;
+ ev->deviceid = ev2->deviceid & DEVICE_BITS;
+ return (DONT_ENQUEUE);
+ }
+ break;
+ case XI_DeviceKeyPress:
+ case XI_DeviceKeyRelease:
+ {
+ register XDeviceKeyEvent *ev = (XDeviceKeyEvent*) save;
+ deviceKeyButtonPointer *ev2 = (deviceKeyButtonPointer *) event;
+
+ ev->root = ev2->root;
+ ev->window = ev2->event;
+ ev->subwindow = ev2->child;
+ ev->time = ev2->time;
+ ev->x_root = ev2->root_x;
+ ev->y_root = ev2->root_y;
+ ev->x = ev2->event_x;
+ ev->y = ev2->event_y;
+ ev->state = ev2->state;
+ ev->same_screen = ev2->same_screen;
+ ev->keycode = ev2->detail;
+ ev->deviceid = ev2->deviceid & DEVICE_BITS;
+ if (ev2->deviceid & MORE_EVENTS)
+ return (DONT_ENQUEUE);
+ else
+ {
+ *re = *save;
+ return (ENQUEUE_EVENT);
+ }
+ }
+ break;
+ case XI_DeviceButtonPress:
+ case XI_DeviceButtonRelease:
+ {
+ register XDeviceButtonEvent *ev = (XDeviceButtonEvent*) save;
+ deviceKeyButtonPointer *ev2 = (deviceKeyButtonPointer *) event;
+
+ ev->root = ev2->root;
+ ev->window = ev2->event;
+ ev->subwindow = ev2->child;
+ ev->time = ev2->time;
+ ev->x_root = ev2->root_x;
+ ev->y_root = ev2->root_y;
+ ev->x = ev2->event_x;
+ ev->y = ev2->event_y;
+ ev->state = ev2->state;
+ ev->same_screen = ev2->same_screen;
+ ev->button = ev2->detail;
+ ev->deviceid = ev2->deviceid & DEVICE_BITS;
+ if (ev2->deviceid & MORE_EVENTS)
+ return (DONT_ENQUEUE);
+ else
+ {
+ *re = *save;
+ return (ENQUEUE_EVENT);
+ }
+ }
+ break;
+ case XI_ProximityIn:
+ case XI_ProximityOut:
+ {
+ register XProximityNotifyEvent *ev =
+ (XProximityNotifyEvent *) save;
+ deviceKeyButtonPointer *ev2 = (deviceKeyButtonPointer *) event;
+
+ ev->root = ev2->root;
+ ev->window = ev2->event;
+ ev->subwindow = ev2->child;
+ ev->time = ev2->time;
+ ev->x_root = ev2->root_x;
+ ev->y_root = ev2->root_y;
+ ev->x = ev2->event_x;
+ ev->y = ev2->event_y;
+ ev->state = ev2->state;
+ ev->same_screen = ev2->same_screen;
+ ev->deviceid = ev2->deviceid & DEVICE_BITS;
+ if (ev2->deviceid & MORE_EVENTS)
+ return (DONT_ENQUEUE);
+ else
+ {
+ *re = *save;
+ return (ENQUEUE_EVENT);
+ }
+ }
+ break;
+ case XI_DeviceValuator:
+ {
+ deviceValuator *xev = (deviceValuator *) event;
+ int save_type = save->type - info->codes->first_event;
+
+ if (save_type == XI_DeviceKeyPress ||
+ save_type == XI_DeviceKeyRelease)
+ {
+ XDeviceKeyEvent *kev = (XDeviceKeyEvent*) save;
+ kev->device_state = xev->device_state;
+ kev->axes_count = xev->num_valuators;
+ kev->first_axis = xev->first_valuator;
+ i = xev->num_valuators;
+ if (i > 6) i = 6;
+ switch (i)
+ {
+ case 6: kev->axis_data[5] = xev->valuator5;
+ case 5: kev->axis_data[4] = xev->valuator4;
+ case 4: kev->axis_data[3] = xev->valuator3;
+ case 3: kev->axis_data[2] = xev->valuator2;
+ case 2: kev->axis_data[1] = xev->valuator1;
+ case 1: kev->axis_data[0] = xev->valuator0;
+ }
+ }
+ else if (save_type == XI_DeviceButtonPress ||
+ save_type == XI_DeviceButtonRelease)
+ {
+ XDeviceButtonEvent *bev = (XDeviceButtonEvent*) save;
+ bev->device_state = xev->device_state;
+ bev->axes_count = xev->num_valuators;
+ bev->first_axis = xev->first_valuator;
+ i = xev->num_valuators;
+ if (i > 6) i = 6;
+ switch (i)
+ {
+ case 6: bev->axis_data[5] = xev->valuator5;
+ case 5: bev->axis_data[4] = xev->valuator4;
+ case 4: bev->axis_data[3] = xev->valuator3;
+ case 3: bev->axis_data[2] = xev->valuator2;
+ case 2: bev->axis_data[1] = xev->valuator1;
+ case 1: bev->axis_data[0] = xev->valuator0;
+ }
+ }
+ else if (save_type == XI_DeviceMotionNotify)
+ {
+ XDeviceMotionEvent *mev = (XDeviceMotionEvent*) save;
+ mev->device_state = xev->device_state;
+ mev->axes_count = xev->num_valuators;
+ mev->first_axis = xev->first_valuator;
+ i = xev->num_valuators;
+ if (i > 6) i = 6;
+ switch (i)
+ {
+ case 6: mev->axis_data[5] = xev->valuator5;
+ case 5: mev->axis_data[4] = xev->valuator4;
+ case 4: mev->axis_data[3] = xev->valuator3;
+ case 3: mev->axis_data[2] = xev->valuator2;
+ case 2: mev->axis_data[1] = xev->valuator1;
+ case 1: mev->axis_data[0] = xev->valuator0;
+ }
+ }
+ else if (save_type == XI_ProximityIn ||
+ save_type == XI_ProximityOut)
+ {
+ XProximityNotifyEvent *pev =
+ (XProximityNotifyEvent*) save;
+ pev->device_state = xev->device_state;
+ pev->axes_count = xev->num_valuators;
+ pev->first_axis = xev->first_valuator;
+ i = xev->num_valuators;
+ if (i > 6) i = 6;
+ switch (i)
+ {
+ case 6: pev->axis_data[5] = xev->valuator5;
+ case 5: pev->axis_data[4] = xev->valuator4;
+ case 4: pev->axis_data[3] = xev->valuator3;
+ case 3: pev->axis_data[2] = xev->valuator2;
+ case 2: pev->axis_data[1] = xev->valuator1;
+ case 1: pev->axis_data[0] = xev->valuator0;
+ }
+ }
+ else if (save_type == XI_DeviceStateNotify)
+ {
+ XDeviceStateNotifyEvent *sev =
+ (XDeviceStateNotifyEvent*) save;
+ XInputClass *any = (XInputClass *) &sev->data[0];
+ XValuatorStatus *v;
+
+ for (i=0; i<sev->num_classes; i++)
+ if (any->class != ValuatorClass)
+ any = (XInputClass *) ((char *) any + any->length);
+ v = (XValuatorStatus *) any;
+ i = v->num_valuators;
+ j = xev->num_valuators;
+ if (j > 3) j = 3;
+ switch (j)
+ {
+ case 3: v->valuators[i + 2] = xev->valuator2;
+ case 2: v->valuators[i + 1] = xev->valuator1;
+ case 1: v->valuators[i + 0] = xev->valuator0;
+ }
+ v->num_valuators += j;
+
+ }
+ *re = *save;
+ return (ENQUEUE_EVENT);
+ }
+ break;
+ case XI_DeviceFocusIn:
+ case XI_DeviceFocusOut:
+ {
+ register XDeviceFocusChangeEvent *ev =
+ (XDeviceFocusChangeEvent *) re;
+ deviceFocus *fev = (deviceFocus *) event;
+
+ *ev = *((XDeviceFocusChangeEvent *) save);
+ ev->window = fev->window;
+ ev->time = fev->time;
+ ev->mode = fev->mode;
+ ev->detail = fev->detail;
+ ev->deviceid = fev->deviceid & DEVICE_BITS;
+ return (ENQUEUE_EVENT);
+ }
+ break;
+ case XI_DeviceStateNotify:
+ {
+ XDeviceStateNotifyEvent *stev =
+ (XDeviceStateNotifyEvent *) save;
+ deviceStateNotify *sev = (deviceStateNotify *) event;
+ char *data;
+
+ stev->window = None;
+ stev->deviceid = sev->deviceid & DEVICE_BITS;
+ stev->time = sev->time;
+ stev->num_classes = Ones ((Mask)sev->classes_reported & InputClassBits);
+ data = (char *) &stev->data[0];
+ if (sev->classes_reported & (1 << KeyClass))
+ {
+ register XKeyStatus *kstev = (XKeyStatus *) data;
+ kstev->class = KeyClass;
+ kstev->length = sizeof (XKeyStatus);
+ kstev->num_keys = sev->num_keys;
+ memcpy ((char *) &kstev->keys[0], (char *) &sev->keys[0], 4);
+ data += sizeof (XKeyStatus);
+ }
+ if (sev->classes_reported & (1 << ButtonClass))
+ {
+ register XButtonStatus *bev = (XButtonStatus *) data;
+ bev->class = ButtonClass;
+ bev->length = sizeof (XButtonStatus);
+ bev->num_buttons = sev->num_buttons;
+ memcpy ((char *) bev->buttons, (char *) sev->buttons, 4);
+ data += sizeof (XButtonStatus);
+ }
+ if (sev->classes_reported & (1 << ValuatorClass))
+ {
+ register XValuatorStatus *vev = (XValuatorStatus *) data;
+ vev->class = ValuatorClass;
+ vev->length = sizeof (XValuatorStatus);
+ vev->num_valuators = sev->num_valuators;
+ vev->mode = sev->classes_reported >> ModeBitsShift;
+ j = sev->num_valuators;
+ if (j > 3) j = 3;
+ switch (j)
+ {
+ case 3: vev->valuators[2] = sev->valuator2;
+ case 2: vev->valuators[1] = sev->valuator1;
+ case 1: vev->valuators[0] = sev->valuator0;
+ }
+ data += sizeof (XValuatorStatus);
+ }
+ if (sev->deviceid & MORE_EVENTS)
+ return (DONT_ENQUEUE);
+ else
+ {
+ *re = *save;
+ stev = (XDeviceStateNotifyEvent *) re;
+ return (ENQUEUE_EVENT);
+ }
+ }
+ break;
+ case XI_DeviceKeystateNotify:
+ {
+ int i;
+ XInputClass *anyclass;
+ register XKeyStatus *kv;
+ deviceKeyStateNotify *ksev = (deviceKeyStateNotify *) event;
+ XDeviceStateNotifyEvent *kstev =
+ (XDeviceStateNotifyEvent *) save;
+
+ anyclass = (XInputClass *) &kstev->data[0];
+ for (i=0; i<kstev->num_classes; i++)
+ if (anyclass->class == KeyClass)
+ break;
+ else
+ anyclass = (XInputClass *) ((char *) anyclass +
+ anyclass->length);
+
+ kv = (XKeyStatus *) anyclass;
+ kv->num_keys = 256;
+ memcpy ((char *) &kv->keys[4], (char *) ksev->keys, 28);
+ if (ksev->deviceid & MORE_EVENTS)
+ return (DONT_ENQUEUE);
+ else
+ {
+ *re = *save;
+ kstev = (XDeviceStateNotifyEvent *) re;
+ return (ENQUEUE_EVENT);
+ }
+ }
+ break;
+ case XI_DeviceButtonstateNotify:
+ {
+ int i;
+ XInputClass *anyclass;
+ register XButtonStatus *bv;
+ deviceButtonStateNotify *bsev = (deviceButtonStateNotify *) event;
+ XDeviceStateNotifyEvent *bstev =
+ (XDeviceStateNotifyEvent *) save;
+
+
+ anyclass = (XInputClass *) &bstev->data[0];
+ for (i=0; i<bstev->num_classes; i++)
+ if (anyclass->class == ButtonClass)
+ break;
+ else
+ anyclass = (XInputClass *) ((char *) anyclass +
+ anyclass->length);
+
+ bv = (XButtonStatus *) anyclass;
+ bv->num_buttons = 256;
+ memcpy ((char *) &bv->buttons[4], (char *) bsev->buttons, 28);
+ if (bsev->deviceid & MORE_EVENTS)
+ return (DONT_ENQUEUE);
+ else
+ {
+ *re = *save;
+ bstev = (XDeviceStateNotifyEvent *) re;
+ return (ENQUEUE_EVENT);
+ }
+ }
+ break;
+ case XI_DeviceMappingNotify:
+ {
+ register XDeviceMappingEvent *ev = (XDeviceMappingEvent *) re;
+ deviceMappingNotify *ev2 = (deviceMappingNotify *) event;
+
+ *ev = *((XDeviceMappingEvent *) save);
+ ev->window = 0;
+ ev->first_keycode = ev2->firstKeyCode;
+ ev->request = ev2->request;
+ ev->count = ev2->count;
+ ev->time = ev2->time;
+ ev->deviceid = ev2->deviceid & DEVICE_BITS;
+ return (ENQUEUE_EVENT);
+ }
+ break;
+ case XI_ChangeDeviceNotify:
+ {
+ register XChangeDeviceNotifyEvent *ev =
+ (XChangeDeviceNotifyEvent *) re;
+ changeDeviceNotify *ev2 = (changeDeviceNotify *) event;
+
+ *ev = *((XChangeDeviceNotifyEvent *) save);
+ ev->window = 0;
+ ev->request = ev2->request;
+ ev->time = ev2->time;
+ ev->deviceid = ev2->deviceid & DEVICE_BITS;
+ return (ENQUEUE_EVENT);
+ }
+ break;
+ default:
+ printf ("XInputWireToEvent: UNKNOWN WIRE EVENT! type=%d\n",type);
+ break;
+ }
+
+ return (DONT_ENQUEUE);
+ }
diff --git a/src/XExtToWire.c b/src/XExtToWire.c
new file mode 100644
index 0000000..abdaf14
--- /dev/null
+++ b/src/XExtToWire.c
@@ -0,0 +1,450 @@
+/* $Xorg: XExtToWire.c,v 1.4 2001/02/09 02:03:50 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/****************************************************************
+ *
+ * XExtToWire.c - reformat an XEvent into a wire event.
+ */
+
+#define NEED_EVENTS
+#define NEED_REPLIES
+
+#include "Xlibint.h"
+#include "XInput.h"
+#include "XIproto.h"
+#include "extutil.h"
+
+Status
+_XiEventToWire(dpy, re, event, count)
+ register Display *dpy; /* pointer to display structure */
+ register XEvent *re; /* pointer to client event */
+ register xEvent **event; /* wire protocol event */
+ register int *count;
+ {
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+ int i;
+
+ switch ((re->type & 0x7f) - info->codes->first_event)
+ {
+ case XI_DeviceKeyPress:
+ case XI_DeviceKeyRelease:
+ {
+ register XDeviceKeyEvent *ev = (XDeviceKeyEvent*) re;
+ register deviceKeyButtonPointer *kev;
+ register deviceValuator *vev;
+
+ *count = 2;
+ kev = (deviceKeyButtonPointer *) Xmalloc (*count * sizeof (xEvent));
+ if (!kev)
+ return(_XUnknownNativeEvent(dpy, re, event));
+ *event = (xEvent *) kev;
+
+ kev->type = ev->type;
+ kev->root = ev->root;
+ kev->event = ev->window;
+ kev->child = ev->subwindow;
+ kev->time = ev->time;
+ kev->event_x = ev->x ;
+ kev->event_y = ev->y ;
+ kev->root_x = ev->x_root;
+ kev->root_y = ev->y_root;
+ kev->state = ev->state;
+ kev->same_screen = ev->same_screen;
+ kev->detail = ev->keycode;
+ kev->deviceid = ev->deviceid | MORE_EVENTS;
+
+ vev = (deviceValuator *) ++kev;
+ vev->type = info->codes->first_event + XI_DeviceValuator;
+ vev->deviceid = ev->deviceid;
+ vev->device_state = ev->device_state;
+ vev->first_valuator = ev->first_axis;
+ vev->num_valuators = ev->axes_count;
+ i = vev->num_valuators;
+ if (i > 6) i = 6;
+ switch (i)
+ {
+ case 6: vev->valuator5 = ev->axis_data[5];
+ case 5: vev->valuator4 = ev->axis_data[4];
+ case 4: vev->valuator3 = ev->axis_data[3];
+ case 3: vev->valuator2 = ev->axis_data[2];
+ case 2: vev->valuator1 = ev->axis_data[1];
+ case 1: vev->valuator0 = ev->axis_data[0];
+ }
+ break;
+ }
+ case XI_ProximityIn:
+ case XI_ProximityOut:
+ {
+ register XProximityNotifyEvent *ev =
+ (XProximityNotifyEvent *) re;
+ register deviceKeyButtonPointer *pev;
+ register deviceValuator *vev;
+
+ *count = 2;
+ pev = (deviceKeyButtonPointer *) Xmalloc (*count * sizeof (xEvent));
+ if (!pev)
+ return(_XUnknownNativeEvent(dpy, re, event));
+ *event = (xEvent *) pev;
+
+ pev->type = ev->type;
+ pev->root = ev->root;
+ pev->event = ev->window;
+ pev->child = ev->subwindow;
+ pev->time = ev->time;
+ pev->event_x = ev->x ;
+ pev->event_y = ev->y ;
+ pev->root_x = ev->x_root;
+ pev->root_y = ev->y_root;
+ pev->state = ev->state;
+ pev->same_screen = ev->same_screen;
+ pev->deviceid = ev->deviceid | MORE_EVENTS;
+
+ vev = (deviceValuator *) ++pev;
+ vev->type = info->codes->first_event + XI_DeviceValuator;
+ vev->deviceid = ev->deviceid;
+ vev->device_state = ev->device_state;
+ vev->first_valuator = ev->first_axis;
+ vev->num_valuators = ev->axes_count;
+
+ i = vev->num_valuators;
+ if (i > 6) i = 6;
+ switch (i)
+ {
+ case 6: vev->valuator5 = ev->axis_data[5];
+ case 5: vev->valuator4 = ev->axis_data[4];
+ case 4: vev->valuator3 = ev->axis_data[3];
+ case 3: vev->valuator2 = ev->axis_data[2];
+ case 2: vev->valuator1 = ev->axis_data[1];
+ case 1: vev->valuator0 = ev->axis_data[0];
+ }
+ break;
+ }
+ case XI_DeviceButtonPress:
+ case XI_DeviceButtonRelease:
+ {
+ register XDeviceButtonEvent *ev =
+ (XDeviceButtonEvent *) re;
+ register deviceKeyButtonPointer *bev;
+ register deviceValuator *vev;
+
+ *count = 2;
+ bev = (deviceKeyButtonPointer *) Xmalloc (*count * sizeof (xEvent));
+ if (!bev)
+ return(_XUnknownNativeEvent(dpy, re, event));
+ *event = (xEvent *) bev;
+
+ bev->type = ev->type;
+ bev->root = ev->root;
+ bev->event = ev->window;
+ bev->child = ev->subwindow;
+ bev->time = ev->time;
+ bev->event_x = ev->x ;
+ bev->event_y = ev->y ;
+ bev->root_x = ev->x_root;
+ bev->root_y = ev->y_root;
+ bev->state = ev->state;
+ bev->same_screen = ev->same_screen;
+ bev->detail = ev->button;
+ bev->deviceid = ev->deviceid | MORE_EVENTS;
+
+ vev = (deviceValuator *) ++bev;
+ vev->type = info->codes->first_event + XI_DeviceValuator;
+ vev->deviceid = ev->deviceid;
+ vev->device_state = ev->device_state;
+ vev->first_valuator = ev->first_axis;
+ vev->num_valuators = ev->axes_count;
+
+ i = vev->num_valuators;
+ if (i > 6) i = 6;
+ switch (i)
+ {
+ case 6: vev->valuator5 = ev->axis_data[5];
+ case 5: vev->valuator4 = ev->axis_data[4];
+ case 4: vev->valuator3 = ev->axis_data[3];
+ case 3: vev->valuator2 = ev->axis_data[2];
+ case 2: vev->valuator1 = ev->axis_data[1];
+ case 1: vev->valuator0 = ev->axis_data[0];
+ }
+ break;
+ }
+ case XI_DeviceMotionNotify:
+ {
+ register XDeviceMotionEvent *ev =
+ (XDeviceMotionEvent *)re;
+ register deviceKeyButtonPointer *mev;
+ register deviceValuator *vev;
+
+ *count = 2;
+ mev = (deviceKeyButtonPointer *) Xmalloc (*count * sizeof (xEvent));
+ if (!mev)
+ return(_XUnknownNativeEvent(dpy, re, event));
+ *event = (xEvent *) mev;
+
+ mev->type = ev->type;
+ mev->root = ev->root;
+ mev->event = ev->window;
+ mev->child = ev->subwindow;
+ mev->time = ev->time;
+ mev->event_x = ev->x ;
+ mev->event_y = ev->y ;
+ mev->root_x = ev->x_root;
+ mev->root_y = ev->y_root;
+ mev->state = ev->state;
+ mev->same_screen = ev->same_screen;
+ mev->detail = ev->is_hint;
+ mev->deviceid = ev->deviceid | MORE_EVENTS;
+
+ vev = (deviceValuator *) ++mev;
+ vev->type = info->codes->first_event + XI_DeviceValuator;
+ vev->deviceid = ev->deviceid;
+ vev->device_state = ev->device_state;
+ vev->first_valuator = ev->first_axis;
+ vev->num_valuators = ev->axes_count;
+
+ i = vev->num_valuators;
+ if (i > 6) i = 6;
+ switch (i)
+ {
+ case 6: vev->valuator5 = ev->axis_data[5];
+ case 5: vev->valuator4 = ev->axis_data[4];
+ case 4: vev->valuator3 = ev->axis_data[3];
+ case 3: vev->valuator2 = ev->axis_data[2];
+ case 2: vev->valuator1 = ev->axis_data[1];
+ case 1: vev->valuator0 = ev->axis_data[0];
+ }
+ break;
+ }
+ case XI_DeviceFocusIn:
+ case XI_DeviceFocusOut:
+ {
+ register XDeviceFocusChangeEvent *ev =
+ (XDeviceFocusChangeEvent *) re;
+ register deviceFocus *fev;
+
+ *count = 1;
+ fev = (deviceFocus *) Xmalloc (*count * sizeof (xEvent));
+ if (!fev)
+ return(_XUnknownNativeEvent(dpy, re, event));
+ *event = (xEvent *) fev;
+
+ fev->type = ev->type;
+ fev->window = ev->window;
+ fev->mode = ev->mode;
+ fev->detail = ev->detail;
+ fev->time = ev->time;
+ fev->deviceid = ev->deviceid;
+ break;
+ }
+ case XI_DeviceMappingNotify:
+ {
+ register XDeviceMappingEvent *ev = (XDeviceMappingEvent *) re;
+ register deviceMappingNotify *mev;
+
+ *count = 1;
+ mev = (deviceMappingNotify *) Xmalloc (*count * sizeof (xEvent));
+ if (!mev)
+ return(_XUnknownNativeEvent(dpy, re, event));
+ *event = (xEvent *) mev;
+
+ mev->type = ev->type;
+ mev->firstKeyCode = ev->first_keycode;
+ mev->request = ev->request;
+ mev->count = ev->count;
+ mev->time = ev->time;
+ mev->deviceid = ev->deviceid;
+ break;
+ }
+ case XI_DeviceStateNotify:
+ {
+ register XDeviceStateNotifyEvent *ev =
+ (XDeviceStateNotifyEvent *) re;
+ register deviceStateNotify *sev;
+ register xEvent *tev;
+ XInputClass *any = (XInputClass *) &ev->data[0];
+ unsigned char *sav_id;
+ *count = 1;
+
+ for (i=0; i<ev->num_classes; i++)
+ {
+ if (any->class == KeyClass)
+ {
+ XKeyStatus *k = (XKeyStatus *) any;
+ if (k->num_keys > 32)
+ (*count)++;
+ }
+ else if (any->class == ButtonClass)
+ {
+ XButtonStatus *b = (XButtonStatus *) any;
+ if (b->num_buttons > 32)
+ (*count)++;
+ }
+ else if (any->class == ValuatorClass)
+ {
+ XValuatorStatus *v = (XValuatorStatus *) any;
+ if (v->num_valuators > 3)
+ (*count)++;
+ }
+ any = (XInputClass *) ((char *) any + any->length);
+ }
+
+ sev = (deviceStateNotify *) Xmalloc (*count * sizeof (xEvent));
+ if (!sev)
+ return(_XUnknownNativeEvent(dpy, re, event));
+ *event = (xEvent *) sev;
+ tev = (xEvent *) (sev+1);
+
+ sev->type = ev->type;
+ sev->deviceid = ev->deviceid;
+ sav_id = &(sev->deviceid);
+ sev->time = ev->time;
+ sev->classes_reported = 0;
+
+ any = (XInputClass *) &ev->data[0];
+ for (i=0; i<ev->num_classes; i++)
+ {
+ if (any->class == KeyClass)
+ {
+ XKeyStatus *k = (XKeyStatus *) any;
+ register deviceKeyStateNotify *kev;
+
+ sev->classes_reported |= (1 << KeyClass);
+ sev->num_keys = k->num_keys;
+ memcpy ((char *) (sev->keys), (char *) (k->keys), 4);
+ if (k->num_keys > 32)
+ {
+ kev = (deviceKeyStateNotify *) tev++;
+ kev->type = info->codes->first_event +
+ XI_DeviceKeystateNotify;
+ kev->deviceid = ev->deviceid;
+ *sav_id |= MORE_EVENTS;
+ sav_id = &(kev->deviceid);
+ memcpy ((char *) (kev->keys), (char *) (&k->keys[4]),
+ 28);
+ }
+ }
+ else if (any->class == ButtonClass)
+ {
+ XButtonStatus *b = (XButtonStatus *) any;
+ register deviceButtonStateNotify *bev;
+
+ sev->classes_reported |= (1 << ButtonClass);
+ sev->num_buttons = b->num_buttons;
+ memcpy ((char *) (sev->buttons), (char *) (b->buttons), 4);
+ if (b->num_buttons > 32)
+ {
+ bev = (deviceButtonStateNotify *) tev++;
+ bev->type = info->codes->first_event +
+ XI_DeviceButtonstateNotify;
+ bev->deviceid = ev->deviceid;
+ *sav_id |= MORE_EVENTS;
+ sav_id = &(bev->deviceid);
+ memcpy ((char *)(bev->buttons), (char *)(&b->buttons[4]),
+ 28);
+ }
+ }
+ else if (any->class == ValuatorClass)
+ {
+ XValuatorStatus *val = (XValuatorStatus *) any;
+ register deviceValuator *vev;
+
+ sev->classes_reported |= (1 << ValuatorClass);
+ sev->num_valuators = val->num_valuators < 3 ?
+ val->num_valuators : 3;
+ switch (sev->num_valuators)
+ {
+ case 3: sev->valuator2 = val->valuators[2];
+ case 2: sev->valuator1 = val->valuators[1];
+ case 1: sev->valuator0 = val->valuators[0];
+ }
+ if (val->num_valuators > 3)
+ {
+ vev = (deviceValuator *) tev++;
+ vev->type = info->codes->first_event +
+ XI_DeviceValuator;
+ vev->deviceid = ev->deviceid;
+ vev->first_valuator = 3;
+ vev->num_valuators = val->num_valuators - 3;
+ *sav_id |= MORE_EVENTS;
+ sav_id = &(vev->deviceid);
+ i = val->num_valuators;
+ if (i > 6) i = 6;
+ switch (i)
+ {
+ case 6: vev->valuator2 = val->valuators[5];
+ case 5: vev->valuator1 = val->valuators[4];
+ case 4: vev->valuator0 = val->valuators[3];
+ }
+ }
+ }
+ any = (XInputClass *) ((char *) any + any->length);
+ }
+ break;
+ }
+ case XI_ChangeDeviceNotify:
+ {
+ register XChangeDeviceNotifyEvent *ev =
+ (XChangeDeviceNotifyEvent *) re;
+ register changeDeviceNotify *cev;
+
+ *count = 1;
+ cev = (changeDeviceNotify *) Xmalloc (*count * sizeof (xEvent));
+ if (!cev)
+ return(_XUnknownNativeEvent(dpy, re, event));
+ *event = (xEvent *) cev;
+
+ cev->type = ev->type;
+ cev->request = ev->request;
+ cev->time = ev->time;
+ cev->deviceid = ev->deviceid;
+ break;
+ }
+ default:
+ return(_XUnknownNativeEvent(dpy, re, event));
+ }
+ return(1);
+ }
diff --git a/src/XFreeLst.c b/src/XFreeLst.c
new file mode 100644
index 0000000..63a5946
--- /dev/null
+++ b/src/XFreeLst.c
@@ -0,0 +1,72 @@
+/* $Xorg: XFreeLst.c,v 1.4 2001/02/09 02:03:50 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XFreeDeviceList - free the input device list.
+ *
+ */
+
+#include <stdio.h>
+#include "Xlib.h"
+
+/***********************************************************************
+ *
+ * Free the list of input devices.
+ *
+ */
+
+XFreeDeviceList (list)
+ XDeviceList *list;
+ {
+ if (list != NULL)
+ {
+ XFree ((list->name) - sizeof(XDeviceList));
+ XFree ((XDeviceList *) list);
+ }
+ }
diff --git a/src/XGMotion.c b/src/XGMotion.c
new file mode 100644
index 0000000..14d2cba
--- /dev/null
+++ b/src/XGMotion.c
@@ -0,0 +1,140 @@
+/* $Xorg: XGMotion.c,v 1.4 2001/02/09 02:03:50 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XGetDeviceMotionEvents - Get the motion history of an input device.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+XDeviceTimeCoord
+*XGetDeviceMotionEvents (dpy, dev, start, stop, nEvents, mode, axis_count)
+ register Display *dpy;
+ XDevice *dev;
+ Time start;
+ Time stop;
+ int *nEvents;
+ int *mode;
+ int *axis_count;
+ {
+ xGetDeviceMotionEventsReq *req;
+ xGetDeviceMotionEventsReply rep;
+ XDeviceTimeCoord *tc;
+ int *data, *bufp, *readp, *savp;
+ long size, size2;
+ int i, j;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return ((XDeviceTimeCoord *) NoSuchExtension);
+
+ GetReq(GetDeviceMotionEvents,req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_GetDeviceMotionEvents;
+ req->start = start;
+ req->stop = stop;
+ req->deviceid = dev->device_id;
+
+ if (!_XReply (dpy, (xReply *)&rep, 0, xFalse)) {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ *nEvents = 0;
+ return (NULL);
+ }
+
+ *mode = rep.mode;
+ *axis_count = rep.axes;
+ *nEvents = rep.nEvents;
+ if (!rep.nEvents)
+ {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (NULL);
+ }
+ size = rep.length << 2;
+ size2 = rep.nEvents *
+ (sizeof (XDeviceTimeCoord) + (rep.axes * sizeof (int)));
+ savp = readp = (int *) Xmalloc (size);
+ bufp = (int *) Xmalloc (size2);
+ if (!bufp || !savp)
+ {
+ *nEvents = 0;
+ _XEatData (dpy, (unsigned long) size);
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (NULL);
+ }
+ _XRead (dpy, (char *) readp, size);
+
+ tc = (XDeviceTimeCoord *) bufp;
+ data = (int *) (tc + rep.nEvents);
+ for (i=0; i<*nEvents; i++,tc++)
+ {
+ tc->time = *readp++;
+ tc->data = data;
+ for (j=0; j<*axis_count; j++)
+ *data++ = *readp++;
+ }
+ XFree ((char *)savp);
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return ((XDeviceTimeCoord *) bufp);
+ }
+
+void XFreeDeviceMotionEvents (events)
+ XDeviceTimeCoord *events;
+ {
+ XFree ((char *)events);
+ }
diff --git a/src/XGetBMap.c b/src/XGetBMap.c
new file mode 100644
index 0000000..7c814fe
--- /dev/null
+++ b/src/XGetBMap.c
@@ -0,0 +1,105 @@
+/* $Xorg: XGetBMap.c,v 1.4 2001/02/09 02:03:50 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XGetDeviceButtonMapping - Get the button mapping of an extension device.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+#ifdef MIN /* some systems define this in <sys/param.h> */
+#undef MIN
+#endif
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
+
+int
+XGetDeviceButtonMapping (dpy, device, map, nmap)
+ register Display *dpy;
+ XDevice *device;
+ unsigned char map[];
+ unsigned int nmap;
+ {
+ int status = 0;
+ unsigned char mapping[256]; /* known fixed size */
+ long nbytes;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ register xGetDeviceButtonMappingReq *req;
+ xGetDeviceButtonMappingReply rep;
+
+ LockDisplay(dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return (NoSuchExtension);
+ GetReq(GetDeviceButtonMapping, req);
+
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_GetDeviceButtonMapping;
+ req->deviceid = device->device_id;
+
+ status = _XReply (dpy, (xReply *)&rep, 0, xFalse);
+ if (status == 1)
+ {
+ nbytes = (long)rep.length << 2;
+ _XRead (dpy, (char *)mapping, nbytes);
+
+ /* don't return more data than the user asked for. */
+ if (rep.nElts)
+ memcpy ((char *) map, (char *) mapping, MIN((int)rep.nElts, nmap));
+ status = rep.nElts;
+ }
+ else
+ status = 0;
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (status);
+ }
diff --git a/src/XGetDCtl.c b/src/XGetDCtl.c
new file mode 100644
index 0000000..65c270c
--- /dev/null
+++ b/src/XGetDCtl.c
@@ -0,0 +1,171 @@
+/* $Xorg: XGetDCtl.c,v 1.4 2001/02/09 02:03:50 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XGetDeviceControl - get the Device control state of an extension device.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "Xlib.h"
+#include "XInput.h"
+#include "extutil.h"
+
+XDeviceControl
+*XGetDeviceControl (dpy, dev, control)
+ register Display *dpy;
+ XDevice *dev;
+ int control;
+ {
+ int size = 0;
+ int nbytes, i;
+ XDeviceControl *Device = NULL;
+ XDeviceControl *Sav = NULL;
+ xDeviceState *d = NULL;
+ xDeviceState *sav = NULL;
+ xGetDeviceControlReq *req;
+ xGetDeviceControlReply rep;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Add_XChangeDeviceControl) == -1)
+ return ((XDeviceControl *) NoSuchExtension);
+
+ GetReq(GetDeviceControl,req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_GetDeviceControl;
+ req->deviceid = dev->device_id;
+ req->control = control;
+
+ if (! _XReply (dpy, (xReply *) &rep, 0, xFalse))
+ {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (XDeviceControl *) NULL;
+ }
+ if (rep.length > 0)
+ {
+ nbytes = (long)rep.length << 2;
+ d = (xDeviceState *) Xmalloc((unsigned) nbytes);
+ if (!d)
+ {
+ _XEatData (dpy, (unsigned long) nbytes);
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (XDeviceControl *) NULL;
+ }
+ sav = d;
+ _XRead (dpy, (char *) d, nbytes);
+
+ switch (d->control)
+ {
+ case DEVICE_RESOLUTION:
+ {
+ xDeviceResolutionState *r;
+
+ r = (xDeviceResolutionState *) d;
+ size += sizeof (XDeviceResolutionState) +
+ (3 * sizeof(int) * r->num_valuators);
+ break;
+ }
+ default:
+ size += d->length;
+ break;
+ }
+
+ Device = (XDeviceControl *) Xmalloc((unsigned) size);
+ if (!Device)
+ {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (XDeviceControl *) NULL;
+ }
+ Sav = Device;
+
+ d = sav;
+ switch (control)
+ {
+ case DEVICE_RESOLUTION:
+ {
+ int *iptr, *iptr2;
+ xDeviceResolutionState *r;
+ XDeviceResolutionState *R;
+ r = (xDeviceResolutionState *) d;
+ R = (XDeviceResolutionState *) Device;
+
+ R->control = DEVICE_RESOLUTION;
+ R->length = sizeof (XDeviceResolutionState);
+ R->num_valuators = r->num_valuators;
+ iptr = (int *) (R+1);
+ iptr2 = (int *) (r+1);
+ R->resolutions = iptr;
+ R->min_resolutions = iptr + R->num_valuators;
+ R->max_resolutions = iptr + (2 * R->num_valuators);
+ for (i=0; i < (3 * R->num_valuators); i++)
+ *iptr++ = *iptr2++;
+ break;
+ }
+ default:
+ break;
+ }
+ XFree (sav);
+ }
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (Sav);
+ }
+
+void XFreeDeviceControl (control)
+ XDeviceControl *control;
+ {
+ XFree (control);
+ }
diff --git a/src/XGetFCtl.c b/src/XGetFCtl.c
new file mode 100644
index 0000000..b941bfb
--- /dev/null
+++ b/src/XGetFCtl.c
@@ -0,0 +1,271 @@
+/* $Xorg: XGetFCtl.c,v 1.4 2001/02/09 02:03:50 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XGetFeedbackControl - get the feedback attributes of an extension device.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "Xlib.h"
+#include "XInput.h"
+#include "extutil.h"
+
+XFeedbackState
+*XGetFeedbackControl (dpy, dev, num_feedbacks)
+ register Display *dpy;
+ XDevice *dev;
+ int *num_feedbacks;
+ {
+ int size = 0;
+ int nbytes, i;
+ XFeedbackState *Feedback = NULL;
+ XFeedbackState *Sav = NULL;
+ xFeedbackState *f = NULL;
+ xFeedbackState *sav = NULL;
+ xGetFeedbackControlReq *req;
+ xGetFeedbackControlReply rep;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return ((XFeedbackState *) NoSuchExtension);
+
+ GetReq(GetFeedbackControl,req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_GetFeedbackControl;
+ req->deviceid = dev->device_id;
+
+ if (! _XReply (dpy, (xReply *) &rep, 0, xFalse))
+ {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (XFeedbackState *) NULL;
+ }
+ if (rep.length > 0)
+ {
+ *num_feedbacks = rep.num_feedbacks;
+ nbytes = (long)rep.length << 2;
+ f = (xFeedbackState *) Xmalloc((unsigned) nbytes);
+ if (!f)
+ {
+ _XEatData (dpy, (unsigned long) nbytes);
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (XFeedbackState *) NULL;
+ }
+ sav = f;
+ _XRead (dpy, (char *) f, nbytes);
+
+ for (i=0; i<*num_feedbacks; i++)
+ {
+ switch (f->class)
+ {
+ case KbdFeedbackClass:
+ size += sizeof (XKbdFeedbackState);
+ break;
+ case PtrFeedbackClass:
+ size += sizeof (XPtrFeedbackState);
+ break;
+ case IntegerFeedbackClass:
+ size += sizeof (XIntegerFeedbackState);
+ break;
+ case StringFeedbackClass:
+ {
+ xStringFeedbackState *strf = (xStringFeedbackState *) f;
+
+ size += sizeof (XStringFeedbackState) +
+ (strf->num_syms_supported * sizeof (KeySym));
+ }
+ break;
+ case LedFeedbackClass:
+ size += sizeof (XLedFeedbackState);
+ break;
+ case BellFeedbackClass:
+ size += sizeof (XBellFeedbackState);
+ break;
+ default:
+ size += f->length;
+ break;
+ }
+ f = (xFeedbackState *) ((char *) f + f->length);
+ }
+
+ Feedback = (XFeedbackState *) Xmalloc((unsigned) size);
+ if (!Feedback)
+ {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (XFeedbackState *) NULL;
+ }
+ Sav = Feedback;
+
+ f = sav;
+ for (i=0; i<*num_feedbacks; i++)
+ {
+ switch (f->class)
+ {
+ case KbdFeedbackClass:
+ {
+ xKbdFeedbackState *k;
+ XKbdFeedbackState *K;
+ k = (xKbdFeedbackState *) f;
+ K = (XKbdFeedbackState *) Feedback;
+
+ K->class = k->class;
+ K->length = sizeof (XKbdFeedbackState);
+ K->id = k->id;
+ K->click = k->click;
+ K->percent = k->percent;
+ K->pitch = k->pitch;
+ K->duration = k->duration;
+ K->led_mask = k->led_mask;
+ K->global_auto_repeat = k->global_auto_repeat;
+ memcpy ((char *) &K->auto_repeats[0],
+ (char *) &k->auto_repeats[0], 32);
+ break;
+ }
+ case PtrFeedbackClass:
+ {
+ xPtrFeedbackState *p;
+ XPtrFeedbackState *P;
+ p = (xPtrFeedbackState *) f;
+ P = (XPtrFeedbackState *) Feedback;
+
+ P->class = p->class;
+ P->length = sizeof (XPtrFeedbackState);
+ P->id = p->id;
+ P->accelNum = p->accelNum;
+ P->accelDenom = p->accelDenom;
+ P->threshold = p->threshold;
+ break;
+ }
+ case IntegerFeedbackClass:
+ {
+ xIntegerFeedbackState *i;
+ XIntegerFeedbackState *I;
+ i = (xIntegerFeedbackState *) f;
+ I = (XIntegerFeedbackState *) Feedback;
+
+ I->class = i->class;
+ I->length = sizeof (XIntegerFeedbackState);
+ I->id = i->id;
+ I->resolution = i->resolution;
+ I->minVal = i->min_value;
+ I->maxVal = i->max_value;
+ break;
+ }
+ case StringFeedbackClass:
+ {
+ xStringFeedbackState *s;
+ XStringFeedbackState *S;
+ s = (xStringFeedbackState *) f;
+ S = (XStringFeedbackState *) Feedback;
+
+ S->class = s->class;
+ S->length = sizeof (XStringFeedbackState) +
+ (s->num_syms_supported * sizeof (KeySym));
+ S->id = s->id;
+ S->max_symbols = s->max_symbols;
+ S->num_syms_supported = s->num_syms_supported;
+ S->syms_supported = (KeySym *) (S+1);
+ memcpy ((char *) S->syms_supported, (char *) (s+1),
+ (S->num_syms_supported * sizeof (KeySym)));
+ break;
+ }
+ case LedFeedbackClass:
+ {
+ xLedFeedbackState *l;
+ XLedFeedbackState *L;
+ l = (xLedFeedbackState *) f;
+ L = (XLedFeedbackState *) Feedback;
+
+ L->class = l->class;
+ L->length = sizeof (XLedFeedbackState);
+ L->id = l->id;
+ L->led_values = l->led_values;
+ L->led_mask = l->led_mask;
+ break;
+ }
+ case BellFeedbackClass:
+ {
+ xBellFeedbackState *b;
+ XBellFeedbackState *B;
+ b = (xBellFeedbackState *) f;
+ B = (XBellFeedbackState *) Feedback;
+
+ B->class = b->class;
+ B->length = sizeof (XBellFeedbackState);
+ B->id = b->id;
+ B->percent = b->percent;
+ B->pitch = b->pitch;
+ B->duration = b->duration;
+ break;
+ }
+ default:
+ break;
+ }
+ f = (xFeedbackState *) ((char *) f + f->length);
+ Feedback = (XFeedbackState *) ((char *) Feedback+Feedback->length);
+ }
+ XFree ((char *)sav);
+ }
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (Sav);
+ }
+
+void XFreeFeedbackList (list)
+ XFeedbackState *list;
+ {
+ XFree ((char *)list);
+ }
diff --git a/src/XGetKMap.c b/src/XGetKMap.c
new file mode 100644
index 0000000..8813b8f
--- /dev/null
+++ b/src/XGetKMap.c
@@ -0,0 +1,118 @@
+/* $Xorg: XGetKMap.c,v 1.4 2001/02/09 02:03:50 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XGetDeviceKeyMapping - get the keymap of an extension device.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+KeySym
+#if NeedFunctionPrototypes
+*XGetDeviceKeyMapping (
+ register Display *dpy,
+ XDevice *dev,
+#if NeedWidePrototypes
+ unsigned int first,
+#else
+ KeyCode first,
+#endif
+ int keycount,
+ int *syms_per_code)
+#else
+*XGetDeviceKeyMapping (dpy, dev, first, keycount, syms_per_code)
+ register Display *dpy;
+ XDevice *dev;
+ KeyCode first;
+ int keycount;
+ int *syms_per_code; /* RETURN */
+#endif
+ {
+ long nbytes;
+ register KeySym *mapping = NULL;
+ xGetDeviceKeyMappingReq *req;
+ xGetDeviceKeyMappingReply rep;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return ((KeySym *) NoSuchExtension);
+
+ GetReq(GetDeviceKeyMapping,req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_GetDeviceKeyMapping;
+ req->deviceid = dev->device_id;
+ req->firstKeyCode = first;
+ req->count = keycount;
+
+ if (! _XReply (dpy, (xReply *) &rep, 0, xFalse))
+ {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (KeySym *) NULL;
+ }
+ if (rep.length > 0) {
+ *syms_per_code = rep.keySymsPerKeyCode;
+ nbytes = (long)rep.length << 2;
+ mapping = (KeySym *) Xmalloc((unsigned) nbytes);
+ if (mapping)
+ _XRead (dpy, (char *)mapping, nbytes);
+ else
+ _XEatData (dpy, (unsigned long) nbytes);
+ }
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (mapping);
+ }
diff --git a/src/XGetMMap.c b/src/XGetMMap.c
new file mode 100644
index 0000000..04615b8
--- /dev/null
+++ b/src/XGetMMap.c
@@ -0,0 +1,102 @@
+/* $Xorg: XGetMMap.c,v 1.4 2001/02/09 02:03:50 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XGetDeviceModifierMapping - get the modifier map of an extension device.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+XModifierKeymap
+*XGetDeviceModifierMapping (dpy, dev)
+ register Display *dpy;
+ XDevice *dev;
+ {
+ unsigned long nbytes;
+ XModifierKeymap *res;
+ xGetDeviceModifierMappingReq *req;
+ xGetDeviceModifierMappingReply rep;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return ((XModifierKeymap *) NoSuchExtension);
+
+ GetReq(GetDeviceModifierMapping,req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_GetDeviceModifierMapping;
+ req->deviceid = dev->device_id;
+
+ if (! _XReply (dpy, (xReply *) &rep, 0, xFalse))
+ {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (XModifierKeymap *) NULL;
+ }
+ nbytes = (unsigned long)rep.length << 2;
+ res = (XModifierKeymap *) Xmalloc(sizeof (XModifierKeymap));
+ if (res)
+ {
+ res->modifiermap = (KeyCode *) Xmalloc (nbytes);
+ if (res->modifiermap)
+ _XReadPad(dpy, (char *) res->modifiermap, nbytes);
+ else
+ _XEatData (dpy, (unsigned long) nbytes);
+ res->max_keypermod = rep.numKeyPerModifier;
+ }
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (res);
+ }
diff --git a/src/XGetProp.c b/src/XGetProp.c
new file mode 100644
index 0000000..fdfaf8c
--- /dev/null
+++ b/src/XGetProp.c
@@ -0,0 +1,118 @@
+/* $Xorg: XGetProp.c,v 1.4 2001/02/09 02:03:50 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XGetDeviceDontPropagateList - Get the dont_propagate_list for a
+ * window.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+XEventClass
+*XGetDeviceDontPropagateList (dpy, window, count)
+ register Display *dpy;
+ Window window;
+ int *count;
+ {
+ XEventClass *list = NULL;
+ int rlen;
+ xGetDeviceDontPropagateListReq *req;
+ xGetDeviceDontPropagateListReply rep;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return ((XEventClass *) NoSuchExtension);
+
+ GetReq(GetDeviceDontPropagateList,req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_GetDeviceDontPropagateList;
+ req->window = window;
+
+ if (! _XReply (dpy, (xReply *) &rep, 0, xFalse))
+ {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (XEventClass *) NULL;
+ }
+ *count = rep.count;
+
+ if (*count)
+ {
+ rlen = rep.length << 2;
+ list = (XEventClass *) Xmalloc (rlen);
+ if (list)
+ {
+ int i;
+ CARD32 ec;
+
+ /* read and assign each XEventClass separately because
+ * the library representation may not be the same size
+ * as the wire representation (64 bit machines)
+ */
+ for (i = 0; i < rep.length; i++)
+ {
+ _XRead (dpy, (char *)(&ec), sizeof(CARD32));
+ list[i] = (XEventClass)ec;
+ }
+ }
+ else
+ _XEatData (dpy, (unsigned long) rlen);
+ }
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (list);
+ }
+
diff --git a/src/XGetVers.c b/src/XGetVers.c
new file mode 100644
index 0000000..dba03d8
--- /dev/null
+++ b/src/XGetVers.c
@@ -0,0 +1,108 @@
+/* $Xorg: XGetVers.c,v 1.4 2001/02/09 02:03:50 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XGetExtensionVersion - Get the version of the input extension.
+ *
+ */
+
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XI.h"
+#include "XInput.h"
+#include "extutil.h"
+
+XExtensionVersion
+#if NeedFunctionPrototypes
+*XGetExtensionVersion (
+ register Display *dpy,
+ _Xconst char *name)
+#else
+*XGetExtensionVersion (dpy, name)
+ register Display *dpy;
+ char *name;
+#endif
+ {
+ xGetExtensionVersionReq *req;
+ xGetExtensionVersionReply rep;
+ XExtensionVersion *ext;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, Dont_Check) == -1)
+ return ((XExtensionVersion *) NoSuchExtension);
+
+ GetReq(GetExtensionVersion,req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_GetExtensionVersion;
+ req->nbytes = name ? strlen(name) : 0;
+ req->length += (unsigned)(req->nbytes+3)>>2;
+ _XSend(dpy, name, (long)req->nbytes);
+
+ if (! _XReply (dpy, (xReply *) &rep, 0, xTrue))
+ {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (XExtensionVersion *) NULL;
+ }
+ ext = (XExtensionVersion *) Xmalloc (sizeof (XExtensionVersion));
+ if (ext)
+ {
+ ext->present = rep.present;
+ if (ext->present)
+ {
+ ext->major_version = rep.major_version;
+ ext->minor_version = rep.minor_version;
+ }
+ }
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (ext);
+ }
+
diff --git a/src/XGrDvBut.c b/src/XGrDvBut.c
new file mode 100644
index 0000000..fc6b400
--- /dev/null
+++ b/src/XGrDvBut.c
@@ -0,0 +1,112 @@
+/* $Xorg: XGrDvBut.c,v 1.4 2001/02/09 02:03:50 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XGrabDeviceBut - Grab a button on an extension device.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+int
+XGrabDeviceButton (dpy, dev, button, modifiers, modifier_device,
+ grab_window, owner_events, event_count, event_list, this_device_mode,
+ other_devices_mode)
+ register Display *dpy;
+ XDevice *dev;
+ unsigned int button; /* CARD8 */
+ unsigned int modifiers; /* CARD16 */
+ XDevice *modifier_device;
+ Window grab_window;
+ Bool owner_events;
+ unsigned int event_count;
+ XEventClass *event_list;
+ int this_device_mode;
+ int other_devices_mode;
+ {
+ register xGrabDeviceButtonReq *req;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return (NoSuchExtension);
+
+ GetReq(GrabDeviceButton, req);
+
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_GrabDeviceButton;
+ req->grabbed_device = dev->device_id;
+ req->button = button;
+ req->modifiers = modifiers;
+ if (modifier_device)
+ req->modifier_device = modifier_device->device_id;
+ else
+ req->modifier_device = UseXKeyboard;
+ req->grabWindow = grab_window;
+ req->ownerEvents = owner_events;
+ req->event_count = event_count;
+ req->this_device_mode = this_device_mode;
+ req->other_devices_mode = other_devices_mode;
+ req->length += event_count;
+
+ /* note: Data is a macro that uses its arguments multiple
+ times, so "nvalues" is changed in a separate assignment
+ statement */
+
+ event_count <<= 2;
+ Data32 (dpy, (long *) event_list, event_count);
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (Success);
+ }
diff --git a/src/XGrDvKey.c b/src/XGrDvKey.c
new file mode 100644
index 0000000..e17d55f
--- /dev/null
+++ b/src/XGrDvKey.c
@@ -0,0 +1,115 @@
+/* $Xorg: XGrDvKey.c,v 1.4 2001/02/09 02:03:51 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XGrabDeviceKey - Grab a key on an extension device.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+int
+XGrabDeviceKey (dpy, dev, key, modifiers, modifier_device,
+ grab_window, owner_events, event_count, event_list, this_device_mode,
+ other_devices_mode)
+ register Display *dpy;
+ XDevice *dev;
+ unsigned int key; /* CARD8 */
+ unsigned int modifiers; /* CARD16 */
+ XDevice *modifier_device;
+ Window grab_window;
+ Bool owner_events;
+ unsigned int event_count;
+ XEventClass *event_list;
+ int this_device_mode;
+ int other_devices_mode;
+ {
+ register xGrabDeviceKeyReq *req;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return (NoSuchExtension);
+
+ GetReq(GrabDeviceKey, req);
+
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_GrabDeviceKey;
+ req->grabbed_device = dev->device_id;
+ req->key = key;
+ req->modifiers = modifiers;
+ if (modifier_device)
+ req->modifier_device = modifier_device->device_id;
+ else
+ req->modifier_device = UseXKeyboard;
+ req->grabWindow = grab_window;
+ req->ownerEvents = owner_events;
+ req->event_count = event_count;
+ req->this_device_mode = this_device_mode;
+ req->other_devices_mode = other_devices_mode;
+ req->length += event_count;
+
+ /* note: Data is a macro that uses its arguments multiple
+ times, so "nvalues" is changed in a separate assignment
+ statement */
+
+ if (event_count)
+ {
+ event_count <<= 2;
+ Data32 (dpy, (long *) event_list, event_count);
+ }
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (Success);
+ }
diff --git a/src/XGrabDev.c b/src/XGrabDev.c
new file mode 100644
index 0000000..6f5ee02
--- /dev/null
+++ b/src/XGrabDev.c
@@ -0,0 +1,107 @@
+/* $Xorg: XGrabDev.c,v 1.4 2001/02/09 02:03:51 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XGrabDevice - grab an extension input device.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+int
+XGrabDevice (dpy, dev, grab_window, ownerEvents, event_count, event_list,
+ this_device_mode, other_devices_mode, time)
+ register Display *dpy;
+ XDevice *dev;
+ Window grab_window;
+ Bool ownerEvents;
+ int event_count;
+ XEventClass *event_list;
+ int this_device_mode;
+ int other_devices_mode;
+ Time time;
+ {
+ xGrabDeviceReply rep;
+ register xGrabDeviceReq *req;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return (NoSuchExtension);
+
+ GetReq(GrabDevice,req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_GrabDevice;
+
+ req->deviceid = dev->device_id;
+ req->grabWindow = grab_window;
+ req->ownerEvents = ownerEvents;
+ req->event_count = event_count;
+ req->this_device_mode = this_device_mode;
+ req->other_devices_mode = other_devices_mode;
+ req->time = time;
+ req->length += event_count;
+
+ /* note: Data is a macro that uses its arguments multiple
+ times, so "nvalues" is changed in a separate assignment
+ statement */
+
+ event_count <<= 2;
+ Data32 (dpy, (long *) event_list, event_count);
+
+ if (_XReply (dpy, (xReply *) &rep, 0, xTrue) == 0)
+ rep.status = GrabSuccess;
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (rep.status);
+ }
diff --git a/src/XGtFocus.c b/src/XGtFocus.c
new file mode 100644
index 0000000..b4a00eb
--- /dev/null
+++ b/src/XGtFocus.c
@@ -0,0 +1,90 @@
+/* $Xorg: XGtFocus.c,v 1.4 2001/02/09 02:03:51 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XGetDeviceFocus - Get the focus of an input device.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+int
+XGetDeviceFocus (dpy, dev, focus, revert_to, time)
+ register Display *dpy;
+ XDevice *dev;
+ Window *focus;
+ int *revert_to;
+ Time *time;
+ {
+ xGetDeviceFocusReq *req;
+ xGetDeviceFocusReply rep;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return (NoSuchExtension);
+
+ GetReq(GetDeviceFocus,req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_GetDeviceFocus;
+ req->deviceid = dev->device_id;
+
+ (void) _XReply (dpy, (xReply *) &rep, 0, xTrue);
+ *focus = rep.focus;
+ *revert_to = rep.revertTo;
+ *time = rep.time;
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (Success);
+ }
+
diff --git a/src/XGtSelect.c b/src/XGtSelect.c
new file mode 100644
index 0000000..2d76a4f
--- /dev/null
+++ b/src/XGtSelect.c
@@ -0,0 +1,144 @@
+/* $Xorg: XGtSelect.c,v 1.4 2001/02/09 02:03:51 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XGetSelectedExtensionEvents - return a list of currently selected events.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+int
+XGetSelectedExtensionEvents (dpy, w, this_client_count, this_client_list,
+ all_clients_count, all_clients_list)
+ register Display *dpy;
+ Window w;
+ int *this_client_count;
+ XEventClass **this_client_list;
+ int *all_clients_count;
+ XEventClass **all_clients_list;
+ {
+ int tlen, alen;
+ register xGetSelectedExtensionEventsReq *req;
+ xGetSelectedExtensionEventsReply rep;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return (NoSuchExtension);
+ GetReq(GetSelectedExtensionEvents,req);
+
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_GetSelectedExtensionEvents;
+ req->window = w;
+
+ if (! _XReply (dpy, (xReply *) &rep, 0, xFalse))
+ {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return Success;
+ }
+
+ *this_client_count = rep.this_client_count;
+ *all_clients_count = rep.all_clients_count;
+
+ if (rep.length)
+ {
+ int i;
+ CARD32 ec;
+ tlen = (*this_client_count) * sizeof(CARD32);
+ alen = (rep.length << 2) - tlen;
+
+ if (tlen)
+ {
+ *this_client_list = (XEventClass *) Xmalloc (
+ *this_client_count * sizeof(XEventClass));
+ if (!*this_client_list)
+ {
+ _XEatData (dpy, (unsigned long) tlen+alen);
+ return (Success);
+ }
+ for (i = 0; i < *this_client_count; i++)
+ {
+ _XRead (dpy, (char *)(&ec), sizeof(CARD32));
+ (*this_client_list)[i] = (XEventClass)ec;
+ }
+ }
+ else
+ *this_client_list = (XEventClass *) NULL;
+ if (alen)
+ {
+ *all_clients_list = (XEventClass *) Xmalloc (
+ *all_clients_count * sizeof(XEventClass));
+ if (!*all_clients_list)
+ {
+ Xfree((char *)*this_client_list);
+ *this_client_list = NULL;
+ _XEatData (dpy, (unsigned long) alen);
+ return (Success);
+ }
+ for (i = 0; i < *all_clients_count; i++)
+ {
+ _XRead (dpy, (char *)(&ec), sizeof(CARD32));
+ (*all_clients_list)[i] = (XEventClass)ec;
+ }
+ }
+ else
+ *all_clients_list = (XEventClass *) NULL;
+
+ }
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (Success);
+ }
diff --git a/src/XListDev.c b/src/XListDev.c
new file mode 100644
index 0000000..714e0c4
--- /dev/null
+++ b/src/XListDev.c
@@ -0,0 +1,257 @@
+/* $Xorg: XListDev.c,v 1.5 2001/02/09 02:03:51 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XListInputDevices - Request the server to return a list of
+ * available input devices.
+ *
+ */
+
+#define NEED_REPLIES
+#define NEED_EVENTS
+#include "Xlibint.h"
+#include "XIproto.h"
+#include "XI.h"
+#include "XInput.h"
+#include "extutil.h"
+
+XDeviceInfo
+*XListInputDevices(dpy, ndevices)
+ register Display *dpy;
+ int *ndevices;
+ {
+ int size;
+ xListInputDevicesReq *req;
+ xListInputDevicesReply rep;
+ xDeviceInfo *list, *slist;
+ XDeviceInfo *sclist;
+ XDeviceInfo *clist = NULL;
+ xAnyClassPtr any, sav_any;
+ XAnyClassPtr Any;
+ char *nptr, *Nptr;
+ register int i,j,k;
+ register long rlen;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return ((XDeviceInfo *) NULL);
+
+ GetReq(ListInputDevices,req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_ListInputDevices;
+
+ if (! _XReply (dpy, (xReply *) &rep, 0, xFalse))
+ {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (XDeviceInfo *) NULL;
+ }
+
+ if ((*ndevices = rep.ndevices)) /* at least 1 input device */
+ {
+ size = *ndevices * sizeof (XDeviceInfo);
+ rlen = rep.length << 2; /* multiply length by 4 */
+ list = (xDeviceInfo *) Xmalloc (rlen);
+ slist = list;
+ if (!slist)
+ {
+ _XEatData (dpy, (unsigned long) rlen);
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (XDeviceInfo *) NULL;
+ }
+ _XRead (dpy, (char *)list, rlen);
+
+ any = (xAnyClassPtr) ((char *) list +
+ (*ndevices * sizeof(xDeviceInfo)));
+ sav_any = any;
+ for (i=0; i<*ndevices; i++, list++)
+ {
+ for (j=0; j<(int)list->num_classes; j++)
+ {
+ switch (any->class)
+ {
+ case KeyClass:
+ size += sizeof (XKeyInfo);
+ break;
+ case ButtonClass:
+ size += sizeof (XButtonInfo);
+ break;
+ case ValuatorClass:
+ {
+ xValuatorInfoPtr v;
+ v = (xValuatorInfoPtr) any;
+ size += sizeof (XValuatorInfo) +
+ (v->num_axes * sizeof (XAxisInfo));
+ break;
+ }
+ default:
+ break;
+ }
+ any = (xAnyClassPtr) ((char *) any + any->length);
+ }
+ }
+
+ for (i=0, nptr = (char *) any; i<*ndevices; i++)
+ {
+ size += *nptr +1;
+ nptr += (*nptr + 1);
+ }
+
+ clist = (XDeviceInfoPtr) Xmalloc (size);
+ if (!clist)
+ {
+ XFree ((char *)slist);
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (XDeviceInfo *) NULL;
+ }
+ sclist = clist;
+ Any = (XAnyClassPtr) ((char *) clist +
+ (*ndevices * sizeof (XDeviceInfo)));
+ list = slist;
+ any = sav_any;
+ for (i=0; i<*ndevices; i++, list++, clist++)
+ {
+ clist->type = list->type;
+ clist->id = list->id;
+ clist->use = list->use;
+ clist->num_classes = list->num_classes;
+ clist->inputclassinfo = Any;
+ for (j=0; j<(int)list->num_classes; j++)
+ {
+ switch (any->class)
+ {
+ case KeyClass:
+ {
+ XKeyInfoPtr K = (XKeyInfoPtr) Any;
+ xKeyInfoPtr k = (xKeyInfoPtr) any;
+ K->class = KeyClass;
+ K->length = sizeof (XKeyInfo);
+ K->min_keycode = k->min_keycode;
+ K->max_keycode = k->max_keycode;
+ K->num_keys = k->num_keys;
+ break;
+ }
+ case ButtonClass:
+ {
+ XButtonInfoPtr B = (XButtonInfoPtr) Any;
+ xButtonInfoPtr b = (xButtonInfoPtr) any;
+ B->class = ButtonClass;
+ B->length = sizeof (XButtonInfo);
+ B->num_buttons = b->num_buttons;
+ break;
+ }
+ case ValuatorClass:
+ {
+ XValuatorInfoPtr V = (XValuatorInfoPtr) Any;
+ xValuatorInfoPtr v = (xValuatorInfoPtr) any;
+ XAxisInfoPtr A;
+ xAxisInfoPtr a;
+
+ V->class = ValuatorClass;
+ V->length = sizeof (XValuatorInfo) +
+ (v->num_axes * sizeof (XAxisInfo));
+ V->num_axes = v->num_axes;
+ V->motion_buffer = v->motion_buffer_size;
+ V->mode = v->mode;
+ A = (XAxisInfoPtr) ((char *) V + sizeof(XValuatorInfo));
+ V->axes = A;
+ a = (xAxisInfoPtr) ((char *) any +
+ sizeof (xValuatorInfo));
+ for (k=0; k<(int)v->num_axes; k++,a++,A++)
+ {
+ A->min_value = a->min_value;
+ A->max_value = a->max_value;
+ A->resolution = a->resolution;
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ any = (xAnyClassPtr) ((char *) any + any->length);
+ Any = (XAnyClassPtr) ((char *) Any + Any->length);
+ }
+ }
+
+ clist = sclist;
+ nptr = (char *) any;
+ Nptr = (char *) Any;
+ for (i=0; i<*ndevices; i++,clist++)
+ {
+ clist->name = (char *) Nptr;
+ memcpy (Nptr, nptr+1, *nptr);
+ Nptr += (*nptr);
+ *Nptr++ = '\0';
+ nptr += (*nptr + 1);
+ }
+ }
+
+ XFree ((char *)slist);
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (sclist);
+ }
+
+/***********************************************************************
+ *
+ * Free the list of input devices.
+ *
+ */
+
+void XFreeDeviceList (list)
+ XDeviceInfo *list;
+ {
+ if (list != NULL)
+ {
+ XFree ((char *) list);
+ }
+ }
diff --git a/src/XOpenDev.c b/src/XOpenDev.c
new file mode 100644
index 0000000..ed1ffe1
--- /dev/null
+++ b/src/XOpenDev.c
@@ -0,0 +1,111 @@
+/* $Xorg: XOpenDev.c,v 1.4 2001/02/09 02:03:51 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XOpenDevice - Request the server to open and extension input device.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+XDevice
+*XOpenDevice(dpy, id)
+ register Display *dpy;
+ register XID id;
+ {
+ register long rlen; /* raw length */
+ xOpenDeviceReq *req;
+ xOpenDeviceReply rep;
+ XDevice *dev;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return ((XDevice *) NoSuchExtension);
+
+ GetReq(OpenDevice,req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_OpenDevice;
+ req->deviceid = id;
+
+ if (! _XReply (dpy, (xReply *) &rep, 0, xFalse))
+ {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (XDevice *) NULL;
+ }
+
+ rlen = rep.length << 2;
+ dev = (XDevice *) Xmalloc (sizeof(XDevice) + rep.num_classes *
+ sizeof (XInputClassInfo));
+ if (dev)
+ {
+ int dlen; /* data length */
+
+ dev->device_id = req->deviceid;
+ dev->num_classes = rep.num_classes;
+ dev->classes = (XInputClassInfo *) ((char *) dev + sizeof (XDevice));
+ dlen = rep.num_classes * sizeof(xInputClassInfo);
+ _XRead (dpy, (char *)dev->classes, dlen);
+ /* could be padding that we still need to eat (yummy!) */
+ if(rlen - dlen > 0)
+ _XEatData (dpy, (unsigned long) rlen - dlen);
+ }
+ else
+ _XEatData (dpy, (unsigned long) rlen);
+
+ UnlockDisplay (dpy);
+ SyncHandle();
+ return (dev);
+ }
+
diff --git a/src/XQueryDv.c b/src/XQueryDv.c
new file mode 100644
index 0000000..e9b3be7
--- /dev/null
+++ b/src/XQueryDv.c
@@ -0,0 +1,196 @@
+/* $Xorg: XQueryDv.c,v 1.4 2001/02/09 02:03:51 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XQueryDeviceState - Query the state of an extension input device.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+XDeviceState
+*XQueryDeviceState (dpy, dev)
+ register Display *dpy;
+ XDevice *dev;
+ {
+ int i,j;
+ int rlen;
+ int size = 0;
+ xQueryDeviceStateReq *req;
+ xQueryDeviceStateReply rep;
+ XDeviceState *state = NULL;
+ XInputClass *any, *Any;
+ char *data;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return ((XDeviceState *) NoSuchExtension);
+
+ GetReq(QueryDeviceState,req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_QueryDeviceState;
+ req->deviceid = dev->device_id;
+
+ if (! _XReply (dpy, (xReply *) &rep, 0, xFalse))
+ {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (XDeviceState *) NULL;
+ }
+
+ rlen = rep.length << 2;
+ if (rlen > 0)
+ {
+ data = Xmalloc (rlen);
+ if (!data)
+ {
+ _XEatData (dpy, (unsigned long) rlen);
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return ((XDeviceState *) NULL);
+ }
+ _XRead (dpy, data, rlen);
+
+ for (i=0, any=(XInputClass *) data; i<(int)rep.num_classes; i++)
+ {
+ switch (any->class)
+ {
+ case KeyClass:
+ size += sizeof (XKeyState);
+ break;
+ case ButtonClass:
+ size += sizeof (XButtonState);
+ break;
+ case ValuatorClass:
+ {
+ xValuatorState *v = (xValuatorState *) any;
+ size += (sizeof (XValuatorState) +
+ (v->num_valuators * sizeof(int)));
+ }
+ break;
+ }
+ any = (XInputClass *) ((char *) any + any->length);
+ }
+ state = (XDeviceState *) Xmalloc (size + sizeof(XDeviceState));
+ if (!state)
+ {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return ((XDeviceState *) NULL);
+ }
+ state->device_id = dev->device_id;
+ state->num_classes = rep.num_classes;
+ state->data = (XInputClass *) (state + 1);
+
+ Any = state->data;
+ for (i=0, any=(XInputClass *) data; i<(int)rep.num_classes; i++)
+ {
+ switch (any->class)
+ {
+ case KeyClass:
+ {
+ xKeyState *k = (xKeyState *) any;
+ XKeyState *K = (XKeyState *) Any;
+ K->class = k->class;
+ K->length = sizeof (XKeyState);
+ K->num_keys = k->num_keys;
+ memcpy ((char *) &K->keys[0], (char *) &k->keys[0], 32);
+ Any = (XInputClass *) (K+1);
+ }
+ break;
+ case ButtonClass:
+ {
+ xButtonState *b = (xButtonState *) any;
+ XButtonState *B = (XButtonState *) Any;
+ B->class = b->class;
+ B->length = sizeof (XButtonState);
+ B->num_buttons = b->num_buttons;
+ memcpy ((char *) &B->buttons[0], (char *) &b->buttons[0],
+ 32);
+ Any = (XInputClass *) (B+1);
+ }
+ break;
+ case ValuatorClass:
+ {
+ xValuatorState *v = (xValuatorState *) any;
+ XValuatorState *V = (XValuatorState *) Any;
+ CARD32 *valuators = (CARD32 *) (v+1);
+ V->class = v->class;
+ V->length = sizeof (XValuatorState);
+ V->num_valuators = v->num_valuators;
+ V->mode = v->mode;
+ Any = (XInputClass *) (V+1);
+ V->valuators = (int *) Any;
+ for (j=0; j<(int)V->num_valuators; j++)
+ *(V->valuators + j) = *valuators++;
+ Any = (XInputClass *)((char *) Any +
+ V->num_valuators * sizeof (int));
+ }
+ break;
+ }
+ any = (XInputClass *) ((char *) any + any->length);
+ }
+ Xfree(data);
+ }
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (state);
+ }
+
+void XFreeDeviceState (list)
+ XDeviceState *list;
+ {
+ XFree ((char *)list);
+ }
diff --git a/src/XSelect.c b/src/XSelect.c
new file mode 100644
index 0000000..09ea2b4
--- /dev/null
+++ b/src/XSelect.c
@@ -0,0 +1,92 @@
+/* $Xorg: XSelect.c,v 1.4 2001/02/09 02:03:51 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XSelectExtensionEvent - Select input from an extension device.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+int
+XSelectExtensionEvent (dpy, w, event_list, count)
+ register Display *dpy;
+ Window w;
+ XEventClass *event_list;
+ int count;
+ {
+ register xSelectExtensionEventReq *req;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy,XInput_Initial_Release) == -1)
+ return (NoSuchExtension);
+ GetReq(SelectExtensionEvent,req);
+
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_SelectExtensionEvent;
+ req->window = w;
+ req->count = count;
+ req->length += count;
+
+ /* note: Data is a macro that uses its arguments multiple
+ times, so "nvalues" is changed in a separate assignment
+ statement */
+
+ count <<= 2;
+ Data (dpy, (char *) event_list, count);
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (Success);
+ }
diff --git a/src/XSetBMap.c b/src/XSetBMap.c
new file mode 100644
index 0000000..29fc22e
--- /dev/null
+++ b/src/XSetBMap.c
@@ -0,0 +1,91 @@
+/* $Xorg: XSetBMap.c,v 1.4 2001/02/09 02:03:51 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XSetDeviceButtonMapping - Set the button mapping of an extension device.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+#define NEED_REPLIES
+
+/* returns either DeviceMappingSuccess or DeviceMappingBusy */
+
+int
+XSetDeviceButtonMapping (dpy, device, map, nmap)
+ register Display *dpy;
+ XDevice *device;
+ unsigned char map[];
+ int nmap;
+ {
+ register xSetDeviceButtonMappingReq *req;
+ xSetDeviceButtonMappingReply rep;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay(dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return (NoSuchExtension);
+ GetReq (SetDeviceButtonMapping, req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_SetDeviceButtonMapping;
+ req->map_length = nmap;
+ req->length += (nmap + 3)>>2;
+ req->deviceid = device->device_id;
+
+ Data (dpy, (char *)map, (long) nmap); /* note that map is char[] */
+ if (_XReply (dpy, (xReply *)&rep, 0, xFalse) == 0) /* suppress error */
+ rep.status = MappingSuccess;
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return ((int) rep.status);
+ }
diff --git a/src/XSetDVal.c b/src/XSetDVal.c
new file mode 100644
index 0000000..55e9bff
--- /dev/null
+++ b/src/XSetDVal.c
@@ -0,0 +1,98 @@
+/* $Xorg: XSetDVal.c,v 1.4 2001/02/09 02:03:51 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XSetDeviceValuators - Set the value of valuators on an extension input
+ * device.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+int
+XSetDeviceValuators (dpy, dev, valuators, first_valuator, num_valuators)
+ register Display *dpy;
+ XDevice *dev;
+ int *valuators;
+ int first_valuator;
+ int num_valuators;
+ {
+ xSetDeviceValuatorsReq *req;
+ xSetDeviceValuatorsReply rep;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Add_XSetDeviceValuators) == -1)
+ return (NoSuchExtension);
+
+ GetReq(SetDeviceValuators,req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_SetDeviceValuators;
+ req->deviceid = dev->device_id;
+ req->first_valuator = first_valuator;
+ req->num_valuators = num_valuators;
+ req->length += num_valuators;
+
+ /* note: Data is a macro that uses its arguments multiple
+ times, so "nvalues" is changed in a separate assignment
+ statement */
+
+ num_valuators <<= 2;
+ Data (dpy, (char *) valuators, num_valuators);
+
+ (void) _XReply (dpy, (xReply *) &rep, 0, xTrue);
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (rep.status);
+ }
+
diff --git a/src/XSetMMap.c b/src/XSetMMap.c
new file mode 100644
index 0000000..a6a97d7
--- /dev/null
+++ b/src/XSetMMap.c
@@ -0,0 +1,89 @@
+/* $Xorg: XSetMMap.c,v 1.4 2001/02/09 02:03:51 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XSetDeviceModifierMapping - set the modifier map of an extension device.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+int
+XSetDeviceModifierMapping (dpy, dev, modmap)
+ register Display *dpy;
+ XDevice *dev;
+ XModifierKeymap *modmap;
+ {
+ int mapSize = modmap->max_keypermod << 3; /* 8 modifiers */
+ xSetDeviceModifierMappingReq *req;
+ xSetDeviceModifierMappingReply rep;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return (NoSuchExtension);
+
+ GetReqExtra(SetDeviceModifierMapping, mapSize, req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_SetDeviceModifierMapping;
+ req->deviceid = dev->device_id;
+ req->numKeyPerModifier = modmap->max_keypermod;
+ memcpy((char *)&req[1], modmap->modifiermap, mapSize);
+
+ (void) _XReply(dpy, (xReply *) &rep,
+ (sizeof(xSetDeviceModifierMappingReply) - sizeof(xReply)) >> 2, xTrue);
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (rep.success);
+ }
diff --git a/src/XSetMode.c b/src/XSetMode.c
new file mode 100644
index 0000000..8ec69cb
--- /dev/null
+++ b/src/XSetMode.c
@@ -0,0 +1,86 @@
+/* $Xorg: XSetMode.c,v 1.4 2001/02/09 02:03:51 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XSetDeviceMode - Set the mode of an extension input device.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+int
+XSetDeviceMode (dpy, dev, mode)
+ register Display *dpy;
+ XDevice *dev;
+ int mode;
+ {
+ xSetDeviceModeReq *req;
+ xSetDeviceModeReply rep;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return (NoSuchExtension);
+
+ GetReq(SetDeviceMode,req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_SetDeviceMode;
+ req->deviceid = dev->device_id;
+ req->mode = mode;
+
+ (void) _XReply (dpy, (xReply *) &rep, 0, xTrue);
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (rep.status);
+ }
+
diff --git a/src/XSndExEv.c b/src/XSndExEv.c
new file mode 100644
index 0000000..78642a5
--- /dev/null
+++ b/src/XSndExEv.c
@@ -0,0 +1,121 @@
+/* $Xorg: XSndExEv.c,v 1.4 2001/02/09 02:03:51 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XSendExtensionEvent - send an extension event to a client.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+extern Status _XiEventToWire();
+
+Status
+XSendExtensionEvent (dpy, dev, dest, prop, count, list, event)
+ register Display *dpy;
+ XDevice *dev;
+ Window dest;
+ Bool prop;
+ int count;
+ XEventClass *list;
+ XEvent *event;
+ {
+ int num_events;
+ int ev_size;
+ xSendExtensionEventReq *req;
+ xEvent *ev;
+ register Status (**fp)();
+ Status status;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return (NoSuchExtension);
+
+ /* call through display to find proper conversion routine */
+
+ fp = &dpy->wire_vec[event->type & 0177];
+ if (*fp == NULL)
+ *fp = _XiEventToWire;
+ status = (**fp)(dpy, event, &ev, &num_events);
+
+ if (status)
+ {
+ GetReq(SendExtensionEvent,req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_SendExtensionEvent;
+ req->deviceid = dev->device_id;
+ req->destination = dest;
+ req->propagate = prop;
+ req->count = count;
+ req->num_events = num_events;
+ ev_size = num_events * sizeof (xEvent);
+ req->length += (count + (ev_size >> 2));
+
+ /* note: Data is a macro that uses its arguments multiple
+ times, so "count" is changed in a separate assignment
+ statement. Any extra events must be sent before the event
+ list, in order to ensure quad alignment. */
+
+ Data (dpy, (char *) ev, ev_size);
+
+ count <<= 2;
+ Data32 (dpy, (long *) list, count);
+ XFree ((char *)ev);
+ }
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (status);
+ }
+
diff --git a/src/XStFocus.c b/src/XStFocus.c
new file mode 100644
index 0000000..e59f3b5
--- /dev/null
+++ b/src/XStFocus.c
@@ -0,0 +1,85 @@
+/* $Xorg: XStFocus.c,v 1.4 2001/02/09 02:03:51 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XSetDeviceFocus - Set the focus of an extension device.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+int
+XSetDeviceFocus(dpy, dev, focus, revert_to, time)
+ register Display *dpy;
+ XDevice *dev;
+ Window focus;
+ int revert_to;
+ Time time;
+ {
+ xSetDeviceFocusReq *req;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+
+ GetReq(SetDeviceFocus,req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_SetDeviceFocus;
+ req->device = dev->device_id;
+ req->focus = focus;
+ req->revertTo = revert_to;
+ req->time = time;
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (Success);
+ }
diff --git a/src/XUngrDev.c b/src/XUngrDev.c
new file mode 100644
index 0000000..a241fba
--- /dev/null
+++ b/src/XUngrDev.c
@@ -0,0 +1,84 @@
+/* $Xorg: XUngrDev.c,v 1.4 2001/02/09 02:03:51 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XUngrabDevice - Ungrab an extension device.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+int
+XUngrabDevice (dpy, dev, time)
+ register Display *dpy;
+ XDevice *dev;
+ Time time;
+ {
+ register xUngrabDeviceReq *req;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay (dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return (NoSuchExtension);
+
+ GetReq(UngrabDevice,req);
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_UngrabDevice;
+
+ req->deviceid = dev->device_id;
+ req->time = time;
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (Success);
+ }
diff --git a/src/XUngrDvB.c b/src/XUngrDvB.c
new file mode 100644
index 0000000..03b7eb1
--- /dev/null
+++ b/src/XUngrDvB.c
@@ -0,0 +1,91 @@
+/* $Xorg: XUngrDvB.c,v 1.4 2001/02/09 02:03:51 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XUngrabDeviceButton - Ungrab a button on an extension device.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+int
+XUngrabDeviceButton(dpy, dev, button, modifiers, modifier_dev, grab_window)
+ register Display *dpy;
+ XDevice *dev;
+ unsigned int button; /* CARD8 */
+ unsigned int modifiers; /* CARD16 */
+ XDevice *modifier_dev;
+ Window grab_window;
+ {
+ register xUngrabDeviceButtonReq *req;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay(dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return (NoSuchExtension);
+ GetReq(UngrabDeviceButton, req);
+
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_UngrabDeviceButton;
+ req->grabbed_device = dev->device_id;
+ req->button = button;
+ req->modifiers = modifiers;
+ if (modifier_dev)
+ req->modifier_device = modifier_dev->device_id;
+ else
+ req->modifier_device = UseXKeyboard;
+ req->grabWindow = grab_window;
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (Success);
+ }
diff --git a/src/XUngrDvK.c b/src/XUngrDvK.c
new file mode 100644
index 0000000..9c9cfb3
--- /dev/null
+++ b/src/XUngrDvK.c
@@ -0,0 +1,91 @@
+/* $Xorg: XUngrDvK.c,v 1.4 2001/02/09 02:03:51 xorgcvs Exp $ */
+
+/************************************************************
+
+Copyright 1989, 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.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-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.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * XUngrabDeviceKey - Ungrab a key on an extension device.
+ *
+ */
+
+#include "XI.h"
+#include "XIproto.h"
+#include "Xlibint.h"
+#include "XInput.h"
+#include "extutil.h"
+
+int
+XUngrabDeviceKey (dpy, dev, key, modifiers, modifier_dev, grab_window)
+ register Display *dpy;
+ XDevice *dev;
+ unsigned int key; /* CARD8 */
+ unsigned int modifiers; /* CARD16 */
+ XDevice *modifier_dev;
+ Window grab_window;
+ {
+ register xUngrabDeviceKeyReq *req;
+ XExtDisplayInfo *info = (XExtDisplayInfo *) XInput_find_display (dpy);
+
+ LockDisplay(dpy);
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release) == -1)
+ return (NoSuchExtension);
+ GetReq(UngrabDeviceKey, req);
+
+ req->reqType = info->codes->major_opcode;
+ req->ReqType = X_UngrabDeviceKey;
+ req->grabbed_device = dev->device_id;
+ req->key = key;
+ req->modifiers = modifiers;
+ if (modifier_dev)
+ req->modifier_device = modifier_dev->device_id;
+ else
+ req->modifier_device = UseXKeyboard;
+ req->grabWindow = grab_window;
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return (Success);
+ }