xref: /OK3568_Linux_fs/external/xserver/hw/dmx/doc/DMXSpec.txt (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun
2*4882a593Smuzhiyun
3*4882a593Smuzhiyun            Client-to-Server DMX Extension to the X Protocol
4*4882a593Smuzhiyun
5*4882a593Smuzhiyun           $Date$, $Revision$
6*4882a593Smuzhiyun
7*4882a593Smuzhiyun               Rickard E. (Rik) Faith (faith@redhat.com)
8*4882a593Smuzhiyun                    Kevin E. Martin (kem@redhat.com)
9*4882a593Smuzhiyun
10*4882a593Smuzhiyun    Copyright 2002-2004 Red Hat Inc., Raleigh, North Carolina.
11*4882a593Smuzhiyun
12*4882a593Smuzhiyun    Permission is hereby granted, free of charge, to any person
13*4882a593Smuzhiyun    obtaining a copy of this software and associated documentation files
14*4882a593Smuzhiyun    (the "Software"), to deal in the Software without restriction,
15*4882a593Smuzhiyun    including without limitation on the rights to use, copy, modify,
16*4882a593Smuzhiyun    merge, publish, distribute, sublicense, and/or sell copies of the
17*4882a593Smuzhiyun    Software, and to permit persons to whom the Software is furnished to
18*4882a593Smuzhiyun    do so, subject to the following conditions:
19*4882a593Smuzhiyun
20*4882a593Smuzhiyun    The above copyright notice and this permission notice (including the
21*4882a593Smuzhiyun    next paragraph) shall be included in all copies or substantial
22*4882a593Smuzhiyun    portions of the Software.
23*4882a593Smuzhiyun
24*4882a593Smuzhiyun    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25*4882a593Smuzhiyun    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26*4882a593Smuzhiyun    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27*4882a593Smuzhiyun    NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
28*4882a593Smuzhiyun    BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
29*4882a593Smuzhiyun    ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
30*4882a593Smuzhiyun    CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
31*4882a593Smuzhiyun    SOFTWARE.
32*4882a593Smuzhiyun
33*4882a593Smuzhiyun
34*4882a593Smuzhiyun
35*4882a593Smuzhiyun1. Overview
36*4882a593Smuzhiyun
37*4882a593Smuzhiyun    The client-to-server DMX extension to the X protocol (DMX) provides
38*4882a593Smuzhiyun    normal client applications with the ability to determine information
39*4882a593Smuzhiyun    about the characteristics of the Xdmx server and the back-end X
40*4882a593Smuzhiyun    servers that DMX is using.
41*4882a593Smuzhiyun
42*4882a593Smuzhiyun    The name for this extension is "DMX".
43*4882a593Smuzhiyun
44*4882a593Smuzhiyun
45*4882a593Smuzhiyun
46*4882a593Smuzhiyun2. Syntactic conventions
47*4882a593Smuzhiyun
48*4882a593Smuzhiyun    This document uses the same syntactic conventions requests and data
49*4882a593Smuzhiyun    types as [X11R6.4].
50*4882a593Smuzhiyun
51*4882a593Smuzhiyun
52*4882a593Smuzhiyun
53*4882a593Smuzhiyun3. Data types
54*4882a593Smuzhiyun
55*4882a593Smuzhiyun    No new data types are defined by this extension.  All data types
56*4882a593Smuzhiyun    referenced in this document are defined in [X11R6.4].
57*4882a593Smuzhiyun
58*4882a593Smuzhiyun
59*4882a593Smuzhiyun
60*4882a593Smuzhiyun4. Requests
61*4882a593Smuzhiyun
62*4882a593Smuzhiyun    DMXQueryVersion
63*4882a593Smuzhiyun        ==>
64*4882a593Smuzhiyun        majorVersion: CARD32
65*4882a593Smuzhiyun        minorVersion: CARD32
66*4882a593Smuzhiyun        patchVersion: CARD32
67*4882a593Smuzhiyun
68*4882a593Smuzhiyun        Errors: None
69*4882a593Smuzhiyun
70*4882a593Smuzhiyun    The protocol this extension actually supports is indicated by
71*4882a593Smuzhiyun    majorVersion and minorVersion (patchVersion indicates the
72*4882a593Smuzhiyun    patchlevel and is for informational purposes only).
73*4882a593Smuzhiyun
74*4882a593Smuzhiyun    Any incompatible changes to the protocol should be indicated by
75*4882a593Smuzhiyun    incrementing majorVersion.
76*4882a593Smuzhiyun
77*4882a593Smuzhiyun    Small, upward-compatible changes should be indicated by incrementing
78*4882a593Smuzhiyun    minorVersion.
79*4882a593Smuzhiyun
80*4882a593Smuzhiyun    Servers that support the protocol defined in this document will
81*4882a593Smuzhiyun    return a majorVersion of 2 and a minorVersion of 2.
82*4882a593Smuzhiyun
83*4882a593Smuzhiyun    (Version 1.5 was the last version in the 1.x series; version 2.0 was
84*4882a593Smuzhiyun    a testing version that was poorly defined.)
85*4882a593Smuzhiyun
86*4882a593Smuzhiyun
87*4882a593Smuzhiyun
88*4882a593Smuzhiyun    DMXSync
89*4882a593Smuzhiyun        ==>
90*4882a593Smuzhiyun        status: CARD32
91*4882a593Smuzhiyun
92*4882a593Smuzhiyun        Errors: None
93*4882a593Smuzhiyun
94*4882a593Smuzhiyun    This request was first supported in version 1.5 of this protocol.
95*4882a593Smuzhiyun    The status field in the reply was introduced in version 2.0 of this
96*4882a593Smuzhiyun    protocol.  Since the status field is ignored, no changes to the
97*4882a593Smuzhiyun    underlying protocol were required.
98*4882a593Smuzhiyun
99*4882a593Smuzhiyun    This request flushes all pending protocol requests between the Xdmx
100*4882a593Smuzhiyun    server and each back-end X server.  It is used by clients that
101*4882a593Smuzhiyun    talk directly to back-end X servers to ensure that all pending Xdmx
102*4882a593Smuzhiyun    requests have reached all back-end servers and have been processed
103*4882a593Smuzhiyun    by those servers.
104*4882a593Smuzhiyun
105*4882a593Smuzhiyun    The value of status is always 0.
106*4882a593Smuzhiyun
107*4882a593Smuzhiyun
108*4882a593Smuzhiyun
109*4882a593Smuzhiyun    DMXForceWindowCreation
110*4882a593Smuzhiyun        window: CARD32
111*4882a593Smuzhiyun        ==>
112*4882a593Smuzhiyun        status: CARD32
113*4882a593Smuzhiyun
114*4882a593Smuzhiyun        Errors: Window
115*4882a593Smuzhiyun
116*4882a593Smuzhiyun    This request was first supported in version 1.2 of this protocol.
117*4882a593Smuzhiyun    This request was changed to have a reply in version 2.0 of this
118*4882a593Smuzhiyun    protocol.  The old version of this request was deprecated and will
119*4882a593Smuzhiyun    return BadImplementation.
120*4882a593Smuzhiyun
121*4882a593Smuzhiyun    When using the lazy window creation optimization, windows are not
122*4882a593Smuzhiyun    created on the back-end X servers until they are required.  This
123*4882a593Smuzhiyun    request forces the immediate creation of the window requested.
124*4882a593Smuzhiyun
125*4882a593Smuzhiyun    The value of status is always 0.
126*4882a593Smuzhiyun
127*4882a593Smuzhiyun
128*4882a593Smuzhiyun
129*4882a593Smuzhiyun
130*4882a593Smuzhiyun    DMXGetScreenCount
131*4882a593Smuzhiyun        ==>
132*4882a593Smuzhiyun        screenCount: CARD32
133*4882a593Smuzhiyun
134*4882a593Smuzhiyun        Errors: None
135*4882a593Smuzhiyun
136*4882a593Smuzhiyun    This request returns the number of screens that the Xdmx server
137*4882a593Smuzhiyun    controls.  Since a DMX screen usually fills all of the available
138*4882a593Smuzhiyun    area on a back-end server, there is usually a one-to-one
139*4882a593Smuzhiyun    correspondence between DMX screens and backend servers.  However, it
140*4882a593Smuzhiyun    is also possible for a DMX screen to cover only part of the
141*4882a593Smuzhiyun    available area on a back-end server, and for more than one DMX
142*4882a593Smuzhiyun    screen to occupy different parts of the visible area on the same
143*4882a593Smuzhiyun    back-end server.
144*4882a593Smuzhiyun
145*4882a593Smuzhiyun    A DMX screen may be managed as a regular X screen in the Xdmx server
146*4882a593Smuzhiyun    or may be joined with other DMX screens using Xinerama.
147*4882a593Smuzhiyun
148*4882a593Smuzhiyun
149*4882a593Smuzhiyun
150*4882a593Smuzhiyun    DMXGetScreenAttributes
151*4882a593Smuzhiyun        physicalScreen: CARD32
152*4882a593Smuzhiyun        ==>
153*4882a593Smuzhiyun        displayName: STRING8
154*4882a593Smuzhiyun        logicalScreen: CARD32
155*4882a593Smuzhiyun        screenWindowWidth: CARD16
156*4882a593Smuzhiyun        screenWindowHeight: CARD16
157*4882a593Smuzhiyun        screenWindowXoffset: INT16
158*4882a593Smuzhiyun        screenWindowYoffset: INT16
159*4882a593Smuzhiyun        rootWindowWidth: CARD16
160*4882a593Smuzhiyun        rootWindowHeight: CARD16
161*4882a593Smuzhiyun        rootWindowXoffset: INT16
162*4882a593Smuzhiyun        rootWindowYoffset: INT16
163*4882a593Smuzhiyun        rootWindowXorigin: INT16
164*4882a593Smuzhiyun        rootWindowYorigin: INT16
165*4882a593Smuzhiyun
166*4882a593Smuzhiyun        Errors: Value
167*4882a593Smuzhiyun
168*4882a593Smuzhiyun    This request is new in version 2.0 of this protocol.  The old
169*4882a593Smuzhiyun    DMXGetScreenInformation request is deprecated and will now return
170*4882a593Smuzhiyun    BadImplementation.
171*4882a593Smuzhiyun
172*4882a593Smuzhiyun    This request returns attributes about a single DMX screen.
173*4882a593Smuzhiyun
174*4882a593Smuzhiyun    The physicalScreen value is between 0 and screenCount-1, inclusive
175*4882a593Smuzhiyun    (values outside this range will result in a Value error).
176*4882a593Smuzhiyun
177*4882a593Smuzhiyun    The displayname is the name used to open the display, either from
178*4882a593Smuzhiyun    the Xdmx command-line or from the configuration file.
179*4882a593Smuzhiyun
180*4882a593Smuzhiyun    The logicalScreen value is the value of the screen that that Xdmx
181*4882a593Smuzhiyun    server exports to clients.  When Xinerama is in use, this value is
182*4882a593Smuzhiyun    typically 0 for all values of physicalScreen.  If Xinerama is in
183*4882a593Smuzhiyun    use, the rootWindowXOrigin and rootWindowYOrigin values specify
184*4882a593Smuzhiyun    where the physical screen is positioned in the global Xinerama
185*4882a593Smuzhiyun    coordinate system.  Otherwise, these values are set to 0.
186*4882a593Smuzhiyun
187*4882a593Smuzhiyun    The screenWindow values comprise a geometry specification (see
188*4882a593Smuzhiyun    X(7x)) for the location of the DMX screen on the back-end screen.
189*4882a593Smuzhiyun    The coordinant system of the back-end display is used.
190*4882a593Smuzhiyun
191*4882a593Smuzhiyun    The first four rootWindow values comprise a geometry specification
192*4882a593Smuzhiyun    (see X(7x)) for the location of the root window on the screen
193*4882a593Smuzhiyun    window.  The coordinant system of the screen window is used.  In
194*4882a593Smuzhiyun    most cases, the root window will have the same geometry as the DMX
195*4882a593Smuzhiyun    screen window, and will occupy the same area of the back-end
196*4882a593Smuzhiyun    display.  (This would not be the case, for example, if automatic
197*4882a593Smuzhiyun    projector alignment is used.)
198*4882a593Smuzhiyun
199*4882a593Smuzhiyun
200*4882a593Smuzhiyun
201*4882a593Smuzhiyun    DMXChangeScreensAttributes
202*4882a593Smuzhiyun        screenCount: CARD32
203*4882a593Smuzhiyun        maskCount: CARD32
204*4882a593Smuzhiyun        screens: LISTofCARD32
205*4882a593Smuzhiyun        valueMasks: LISTofCARD32
206*4882a593Smuzhiyun        valueList: LISTofVALUES
207*4882a593Smuzhiyun        ==>
208*4882a593Smuzhiyun        status: CARD32
209*4882a593Smuzhiyun        errorScreen: CARD32
210*4882a593Smuzhiyun
211*4882a593Smuzhiyun        Errors: Length, Alloc
212*4882a593Smuzhiyun
213*4882a593Smuzhiyun    This request was first supported in version 2.0 of this protocol.
214*4882a593Smuzhiyun    (A singular version of this request with the ability to change some
215*4882a593Smuzhiyun    RootWindow attributes was supported in version 1.3 of this protocol,
216*4882a593Smuzhiyun    has been deprecated, and will return BadImplementation.)
217*4882a593Smuzhiyun
218*4882a593Smuzhiyun    This request changes the geometries and positions of the DMX screen
219*4882a593Smuzhiyun    and DMX root windows on the back-end X servers.
220*4882a593Smuzhiyun
221*4882a593Smuzhiyun    The valueMask and valueList specify which attributes are to be
222*4882a593Smuzhiyun    changed.  The possible values are:
223*4882a593Smuzhiyun
224*4882a593Smuzhiyun        Attribute               Type
225*4882a593Smuzhiyun
226*4882a593Smuzhiyun        ScreenWindowWidth       CARD16
227*4882a593Smuzhiyun        ScreenWindowHeight      CARD16
228*4882a593Smuzhiyun        ScreenWindowXoffset     INT16
229*4882a593Smuzhiyun        ScreenWindowYoffset     INT16
230*4882a593Smuzhiyun        RootWindowWidth         CARD16
231*4882a593Smuzhiyun        RootWindowHeight        CARD16
232*4882a593Smuzhiyun        RootWindowXoffset       INT16
233*4882a593Smuzhiyun        RootWindowYoffset       INT16
234*4882a593Smuzhiyun        RootWindowXorigin       INT16
235*4882a593Smuzhiyun        RootWindowYorigin       INT16
236*4882a593Smuzhiyun
237*4882a593Smuzhiyun    The attribute values have the same meaning as do the corresponding
238*4882a593Smuzhiyun    values for DMXGetScreenAttributes.
239*4882a593Smuzhiyun
240*4882a593Smuzhiyun    Non-fatal errors will be returned in status (0 otherwise):
241*4882a593Smuzhiyun        DmxBadXinerama: Xinerama is not active
242*4882a593Smuzhiyun        DmxBadValue:    The resulting position is not allowed
243*4882a593Smuzhiyun                        (e.g., one corner is outside the bounding box)
244*4882a593Smuzhiyun    On error, errorScreen will contain the number of the screen that
245*4882a593Smuzhiyun    caused the first error.
246*4882a593Smuzhiyun
247*4882a593Smuzhiyun
248*4882a593Smuzhiyun
249*4882a593Smuzhiyun    DMXAddScreen
250*4882a593Smuzhiyun        displayName: STRING8
251*4882a593Smuzhiyun        physicalScreen: CARD32
252*4882a593Smuzhiyun        valueMask: CARD32
253*4882a593Smuzhiyun        valueList: LISTofVALUES
254*4882a593Smuzhiyun        ==>
255*4882a593Smuzhiyun        status: CARD32
256*4882a593Smuzhiyun        physicalScreen: CARD32
257*4882a593Smuzhiyun
258*4882a593Smuzhiyun        Errors: Length, Alloc, Value
259*4882a593Smuzhiyun
260*4882a593Smuzhiyun    This request was first supported in version 2.2 of this protocol.
261*4882a593Smuzhiyun
262*4882a593Smuzhiyun    This request re-attaches the back-end physicalScreen to the Xdmx
263*4882a593Smuzhiyun    server.  Only back-end screens that have been previously detached
264*4882a593Smuzhiyun    with DMXRemoveScreen may be added.  The name of the back-end display
265*4882a593Smuzhiyun    is given in displayName, and this will replace the name of the
266*4882a593Smuzhiyun    back-end screen that was detached.  Both the displayName and
267*4882a593Smuzhiyun    physicalScreen must be correct for this request to work.
268*4882a593Smuzhiyun
269*4882a593Smuzhiyun    The valueMask and valueList specify the attributes to be used.  The
270*4882a593Smuzhiyun    possible values are:
271*4882a593Smuzhiyun
272*4882a593Smuzhiyun        Attribute               Type
273*4882a593Smuzhiyun
274*4882a593Smuzhiyun        ScreenWindowWidth       CARD16
275*4882a593Smuzhiyun        ScreenWindowHeight      CARD16
276*4882a593Smuzhiyun        ScreenWindowXoffset     INT16
277*4882a593Smuzhiyun        ScreenWindowYoffset     INT16
278*4882a593Smuzhiyun        RootWindowWidth         CARD16
279*4882a593Smuzhiyun        RootWindowHeight        CARD16
280*4882a593Smuzhiyun        RootWindowXoffset       INT16
281*4882a593Smuzhiyun        RootWindowYoffset       INT16
282*4882a593Smuzhiyun        RootWindowXorigin       INT16
283*4882a593Smuzhiyun        RootWindowYorigin       INT16
284*4882a593Smuzhiyun
285*4882a593Smuzhiyun    The attribute values have the same meaning as do the corresponding
286*4882a593Smuzhiyun    values for DMXGetScreenAttributes.
287*4882a593Smuzhiyun
288*4882a593Smuzhiyun    On success, status will be 0 and physicalScreen will contain the new
289*4882a593Smuzhiyun    screen number.  On failure, status will be non-zero.  The status
290*4882a593Smuzhiyun    will be 1 if any of the following occured:
291*4882a593Smuzhiyun        * the -addremovescreens command-line option was not specified on
292*4882a593Smuzhiyun          the Xdmx command line
293*4882a593Smuzhiyun        * the value of physicalScreen is out of range
294*4882a593Smuzhiyun        * physicalScreen has not been detached (with DMXRemoveScreen)
295*4882a593Smuzhiyun        * displayName cannot be opened
296*4882a593Smuzhiyun        * the visuals of displayname do not match the visuals that Xdmx
297*4882a593Smuzhiyun          is using
298*4882a593Smuzhiyun        * the screen data for displayName does not match the data for the
299*4882a593Smuzhiyun          previously removed display
300*4882a593Smuzhiyun    The status will be DmxBadValue if the attribute values are out of
301*4882a593Smuzhiyun    range.
302*4882a593Smuzhiyun
303*4882a593Smuzhiyun
304*4882a593Smuzhiyun
305*4882a593Smuzhiyun    DMXRemoveScreen
306*4882a593Smuzhiyun        physicalScreen: CARD32
307*4882a593Smuzhiyun        ==>
308*4882a593Smuzhiyun        status: CARD32
309*4882a593Smuzhiyun
310*4882a593Smuzhiyun        Errors: None
311*4882a593Smuzhiyun
312*4882a593Smuzhiyun    This request was first supported in version 2.2 of this protocol.
313*4882a593Smuzhiyun
314*4882a593Smuzhiyun    This request detaches the physicalScreen screen.
315*4882a593Smuzhiyun
316*4882a593Smuzhiyun    On success, status will be 0.  On failure, the status will 1 if any
317*4882a593Smuzhiyun    of the following occur:
318*4882a593Smuzhiyun        * the -addremovescreens command-line option was not specified on
319*4882a593Smuzhiyun          the Xdmx command line
320*4882a593Smuzhiyun        * the value of physicalScreen is out of range
321*4882a593Smuzhiyun        * the back-end screen has already been detached.
322*4882a593Smuzhiyun
323*4882a593Smuzhiyun
324*4882a593Smuzhiyun
325*4882a593Smuzhiyun    DMXGetWindowAttributes
326*4882a593Smuzhiyun        window: CARD32
327*4882a593Smuzhiyun        ==>
328*4882a593Smuzhiyun        screenCount: CARD32
329*4882a593Smuzhiyun        screens: LISTofCARD32
330*4882a593Smuzhiyun        windows: LISTofCARD32
331*4882a593Smuzhiyun        pos: LISTofRECTANGLE
332*4882a593Smuzhiyun        vis: LISTofRECTANGLE
333*4882a593Smuzhiyun
334*4882a593Smuzhiyun        Errors: Window, Alloc
335*4882a593Smuzhiyun
336*4882a593Smuzhiyun    This request computes the return values incorrectly for version 1.0
337*4882a593Smuzhiyun    of this protocol.  Version 1.1 of this protocol conforms to this
338*4882a593Smuzhiyun    description.  In version 2.0, the name of this request was changed
339*4882a593Smuzhiyun    from DMXGetWindowInformation.  However, since the request itself did
340*4882a593Smuzhiyun    not change, no changes to the underlying protocol were made.
341*4882a593Smuzhiyun
342*4882a593Smuzhiyun    Given a window ID on the Xdmx server, this request returns data
343*4882a593Smuzhiyun    about how the window is represented on the back-end X servers.  For
344*4882a593Smuzhiyun    each back-end X server that displays a portion of the window, the
345*4882a593Smuzhiyun    following information is returned:
346*4882a593Smuzhiyun        1) the number of the physical screen containing that portion
347*4882a593Smuzhiyun           (which can be used with the DMXGetScreenAttributes request
348*4882a593Smuzhiyun           to obtain more information about the screen),
349*4882a593Smuzhiyun        2) the window ID on the back-end X server of the window
350*4882a593Smuzhiyun           containing that portion,
351*4882a593Smuzhiyun        3) the position and dimensions of the window on the back-end, in
352*4882a593Smuzhiyun           screen coordinates, and
353*4882a593Smuzhiyun        4) the visible area of the window on the back-end, in
354*4882a593Smuzhiyun           window-relative coordinates (all zeros for windows that are
355*4882a593Smuzhiyun           not visible).
356*4882a593Smuzhiyun    Note that DMX allows multiple back-end windows to overlap in their
357*4882a593Smuzhiyun    view of the DMX logical window.  Further, a logical window does not
358*4882a593Smuzhiyun    have to be completely covered by back-end windows -- there may be
359*4882a593Smuzhiyun    gaps.
360*4882a593Smuzhiyun
361*4882a593Smuzhiyun    As an example, consider a 500x500 window that spans the top two
362*4882a593Smuzhiyun    1024x768 back-end displays (A and B) of a 2048x1536 DMX display
363*4882a593Smuzhiyun    composed of 4 1024x768 back-end displays arranged in a cube:
364*4882a593Smuzhiyun        A B
365*4882a593Smuzhiyun        C D
366*4882a593Smuzhiyun
367*4882a593Smuzhiyun    In this case, the DMXGetWindowAttributes call would return the
368*4882a593Smuzhiyun    following information for the 500x500 window:
369*4882a593Smuzhiyun
370*4882a593Smuzhiyun    display A: 500x500 window at 1024-250,0 (relative to back end)
371*4882a593Smuzhiyun               with 250x500 visible at 0,0 (relative to window origin)
372*4882a593Smuzhiyun
373*4882a593Smuzhiyun    display B: 500x500 window at -250,0 (relative to back end)
374*4882a593Smuzhiyun               with 250x500 visible at 250,0 (relative to window origin)
375*4882a593Smuzhiyun
376*4882a593Smuzhiyun    display C: 500x500 window at 1024-250,-768 with 0x0 visible at 0,0
377*4882a593Smuzhiyun
378*4882a593Smuzhiyun    display D: 500x500 window at -250,-768 with 0x0 visible at 0,0
379*4882a593Smuzhiyun
380*4882a593Smuzhiyun    Note that if the specified window has not yet been mapped when
381*4882a593Smuzhiyun    DMXGetWindowAttributes is called, then a subsequent XMapWindow call
382*4882a593Smuzhiyun    might be buffered in xlib while requests directly to the back-end X
383*4882a593Smuzhiyun    servers are processed.  This race condition can be solved by calling
384*4882a593Smuzhiyun    DMXSync before talking directly to the back-end X servers.
385*4882a593Smuzhiyun
386*4882a593Smuzhiyun
387*4882a593Smuzhiyun
388*4882a593Smuzhiyun    DMXGetDesktopAttributes
389*4882a593Smuzhiyun        ==>
390*4882a593Smuzhiyun        width: INT16
391*4882a593Smuzhiyun        height: INT16
392*4882a593Smuzhiyun        shiftX: INT16
393*4882a593Smuzhiyun        shiftY: INT16
394*4882a593Smuzhiyun
395*4882a593Smuzhiyun        Errors: None
396*4882a593Smuzhiyun
397*4882a593Smuzhiyun    This request was first supported in version 2.0 of this protocol.
398*4882a593Smuzhiyun
399*4882a593Smuzhiyun    This request returns the size of the bounding box of the whole
400*4882a593Smuzhiyun    screen in width and height.  The shiftX and shiftY values will
401*4882a593Smuzhiyun    always be 0.  The global bounding box is computed whether or not
402*4882a593Smuzhiyun    Xinerama is active, and may be larger than the Xinerama screen size
403*4882a593Smuzhiyun    because of information in the configuration file.
404*4882a593Smuzhiyun
405*4882a593Smuzhiyun
406*4882a593Smuzhiyun
407*4882a593Smuzhiyun    DMXChangeDesktopAttributes
408*4882a593Smuzhiyun        valueMask: BITMASK
409*4882a593Smuzhiyun        valueList: LISTofVALUE
410*4882a593Smuzhiyun        ==>
411*4882a593Smuzhiyun        status: CARD32
412*4882a593Smuzhiyun
413*4882a593Smuzhiyun        Errors: Length, Value
414*4882a593Smuzhiyun
415*4882a593Smuzhiyun    This request was first supported in version 2.0 of this protocol.
416*4882a593Smuzhiyun
417*4882a593Smuzhiyun    This request resizes the bounding box of the whole screen when using
418*4882a593Smuzhiyun    the Xinerama extension.  Otherwise, it has no effect on the screen
419*4882a593Smuzhiyun    layout.  The valueMask and valueList specify which attributes are to
420*4882a593Smuzhiyun    be changed.  The possible values are:
421*4882a593Smuzhiyun
422*4882a593Smuzhiyun        Attriubute      Type
423*4882a593Smuzhiyun
424*4882a593Smuzhiyun        Width           INT16
425*4882a593Smuzhiyun        Height          INT16
426*4882a593Smuzhiyun        ShiftX          INT16
427*4882a593Smuzhiyun        ShiftY          INT16
428*4882a593Smuzhiyun
429*4882a593Smuzhiyun    Width and Height specify the new width and height for the bounding
430*4882a593Smuzhiyun    box.  ShiftX and ShiftY specify where the Xinerama origin will be
431*4882a593Smuzhiyun    placed with respect to the origin of the new bounding box.  This
432*4882a593Smuzhiyun    allows the left and upper edges of the bounding box to be changed
433*4882a593Smuzhiyun    without changing the visual position of the windows on the desktop.
434*4882a593Smuzhiyun    If Width or Height is not specified, the current values will be
435*4882a593Smuzhiyun    used.  If ShiftX or ShiftY is not specified, 0 will be used.
436*4882a593Smuzhiyun
437*4882a593Smuzhiyun    All coordinants are in the global DMX coordinant system.  If
438*4882a593Smuzhiyun    Xinerama is not active, this request is not useful.
439*4882a593Smuzhiyun
440*4882a593Smuzhiyun    Non-fatal errors will be returned in status (0 otherwise):
441*4882a593Smuzhiyun        DmxBadXinerama: Xinerama is not active
442*4882a593Smuzhiyun        DmxBadValue:    The size of the bounding box is too large
443*4882a593Smuzhiyun
444*4882a593Smuzhiyun
445*4882a593Smuzhiyun
446*4882a593Smuzhiyun    DMXGetInputCount
447*4882a593Smuzhiyun        ==>
448*4882a593Smuzhiyun        inputCount: CARD32
449*4882a593Smuzhiyun
450*4882a593Smuzhiyun    This request was first supported in version 1.1 of this protocol.
451*4882a593Smuzhiyun
452*4882a593Smuzhiyun    This request returns the number of input devices connected to the
453*4882a593Smuzhiyun    Xdmx server.  This number is the same as that returned by
454*4882a593Smuzhiyun    XListInputDevices, but is available even when the XInput extension
455*4882a593Smuzhiyun    is not supported.
456*4882a593Smuzhiyun
457*4882a593Smuzhiyun
458*4882a593Smuzhiyun
459*4882a593Smuzhiyun    DMXGetInputAttributes
460*4882a593Smuzhiyun        deviceId: CARD32
461*4882a593Smuzhiyun        ==>
462*4882a593Smuzhiyun        inputType: CARD32
463*4882a593Smuzhiyun        physicalScreen: CARD32
464*4882a593Smuzhiyun        physicalId: CARD32
465*4882a593Smuzhiyun        isCore: BOOL
466*4882a593Smuzhiyun        sendsCore: BOOL
467*4882a593Smuzhiyun        detached: BOOL
468*4882a593Smuzhiyun        name: STRING8
469*4882a593Smuzhiyun
470*4882a593Smuzhiyun        Errors: Value
471*4882a593Smuzhiyun
472*4882a593Smuzhiyun    This request was first supported in version 1.1 of this protocol.
473*4882a593Smuzhiyun    In version 2.0, the name of this request was changed from
474*4882a593Smuzhiyun    DMXGetInputInformation.  However, since the request itself did not
475*4882a593Smuzhiyun    change, no changes to the underlying protocol were made.  In version
476*4882a593Smuzhiyun    2.2, the name of detached was changed from reservation.  There was
477*4882a593Smuzhiyun    no change in underlying protocol.
478*4882a593Smuzhiyun
479*4882a593Smuzhiyun    This request returns information about the specified input device
480*4882a593Smuzhiyun    that cannot be obtained from the XListInputDeivices call.  The
481*4882a593Smuzhiyun    deviceId is the same as that used by the XListInputDevices call, and
482*4882a593Smuzhiyun    must be in the range 0 to inputCount-1, inclusive (values outside
483*4882a593Smuzhiyun    this range will result in a Value error).
484*4882a593Smuzhiyun
485*4882a593Smuzhiyun    The value of inputType will always be valid, and will be one of the
486*4882a593Smuzhiyun    following values:
487*4882a593Smuzhiyun        0 for local (and dummy) devices,
488*4882a593Smuzhiyun        1 for console devices, and
489*4882a593Smuzhiyun        2 for back-end devices.
490*4882a593Smuzhiyun
491*4882a593Smuzhiyun    For local devices, all other fields returned, except isCore and
492*4882a593Smuzhiyun    sendsCore, are invalid.
493*4882a593Smuzhiyun
494*4882a593Smuzhiyun    For console devices, the physicalScreen and physicalID will be
495*4882a593Smuzhiyun    invalid, and the name will return the name of the X server on which
496*4882a593Smuzhiyun    the console window is displayed.
497*4882a593Smuzhiyun
498*4882a593Smuzhiyun    For back-end devices, the physicalScreen will identify the back-end
499*4882a593Smuzhiyun    display and can be used as an argument to DMXGetScreenAttributes to
500*4882a593Smuzhiyun    obtain more information; the physicalId will be the XInput device id
501*4882a593Smuzhiyun    on the back-end X server; and the name will be invalid (since it
502*4882a593Smuzhiyun    does not provide any additional information that cannot be obtained
503*4882a593Smuzhiyun    with DMXGetScreenAttributes).
504*4882a593Smuzhiyun
505*4882a593Smuzhiyun    If isCore is True, then this device is active as a true core input
506*4882a593Smuzhiyun    device and will send core events.  If sendsCore is True, then this
507*4882a593Smuzhiyun    device is an XInput extension device, but sends core events instead
508*4882a593Smuzhiyun    of extension events.  Note that this behavior is different from that
509*4882a593Smuzhiyun    of XFree86 or Xorg, where XInput extension devices may send both
510*4882a593Smuzhiyun    extension events and core events.
511*4882a593Smuzhiyun
512*4882a593Smuzhiyun    If detached is True, then this device has been detached and is no
513*4882a593Smuzhiyun    longer producing input events.  The device may be reattached using
514*4882a593Smuzhiyun    DMXAddInput.
515*4882a593Smuzhiyun
516*4882a593Smuzhiyun
517*4882a593Smuzhiyun
518*4882a593Smuzhiyun    DMXAddInput
519*4882a593Smuzhiyun        displayName: STRING8
520*4882a593Smuzhiyun        valueMask: CARD32
521*4882a593Smuzhiyun        valueList: LISTofVALUES
522*4882a593Smuzhiyun        ==>
523*4882a593Smuzhiyun        status: CARD32
524*4882a593Smuzhiyun        physicalId: CARD32
525*4882a593Smuzhiyun
526*4882a593Smuzhiyun        Errors: Value, Access
527*4882a593Smuzhiyun
528*4882a593Smuzhiyun    This request was first supported in version 2.2 of this protocol.
529*4882a593Smuzhiyun
530*4882a593Smuzhiyun    The valueMask and valueList specify the attributes to be used.  The
531*4882a593Smuzhiyun    possible values are:
532*4882a593Smuzhiyun
533*4882a593Smuzhiyun        Attribute               Type
534*4882a593Smuzhiyun
535*4882a593Smuzhiyun        InputType               CARD32
536*4882a593Smuzhiyun        InputPhysicalScreen     CARD32
537*4882a593Smuzhiyun        InputSendsCore          BOOL
538*4882a593Smuzhiyun
539*4882a593Smuzhiyun    This request attaches an input device to the Xdmx server.  The value
540*4882a593Smuzhiyun    of inputType will be one:
541*4882a593Smuzhiyun        1 for console devices, and
542*4882a593Smuzhiyun        2 for back-end devices.
543*4882a593Smuzhiyun    Other values of InputType will return a BadValue error.  Local
544*4882a593Smuzhiyun    devices (inputType=0 in DMXGetInputAttributes) cannot be attached or
545*4882a593Smuzhiyun    removed.  For console devices, displayName will store the name of
546*4882a593Smuzhiyun    the display to be used.
547*4882a593Smuzhiyun
548*4882a593Smuzhiyun    For back-end devices, InputPhysicalScreen will specify the screen
549*4882a593Smuzhiyun    number.  BadValue will be returned if the screen number is out of
550*4882a593Smuzhiyun    range.  BadAccess will be returned if the input has already been
551*4882a593Smuzhiyun    attached or if the backend screen is currently detached.
552*4882a593Smuzhiyun
553*4882a593Smuzhiyun    If InputSendsCore is True, the new device will be added as a true
554*4882a593Smuzhiyun    core device.
555*4882a593Smuzhiyun
556*4882a593Smuzhiyun    If a device was removed with DMXRemoveInput an attempt will be made
557*4882a593Smuzhiyun    to reconnect the previous devices (InputSendsCore is ignored in this
558*4882a593Smuzhiyun    case).
559*4882a593Smuzhiyun
560*4882a593Smuzhiyun
561*4882a593Smuzhiyun
562*4882a593Smuzhiyun    DMXRemoveInput
563*4882a593Smuzhiyun        physicalId: CARD32
564*4882a593Smuzhiyun        ==>
565*4882a593Smuzhiyun        status: CARD32
566*4882a593Smuzhiyun
567*4882a593Smuzhiyun        Errors: Value, Access
568*4882a593Smuzhiyun
569*4882a593Smuzhiyun    This request was first supported in version 2.2 of this protocol.
570*4882a593Smuzhiyun
571*4882a593Smuzhiyun    This request detaches the input device with physicalId, and all
572*4882a593Smuzhiyun    associated inputs (e.g., if the physicalId is a backend mouse, and a
573*4882a593Smuzhiyun    keyboard is also attached to the backend, then both devices will be
574*4882a593Smuzhiyun    detached).  If the physicalId is outside the valid range (0 to one
575*4882a593Smuzhiyun    less than the value returned by DMXInputCount), BadValue is
576*4882a593Smuzhiyun    returned.  If the physicalId has already been detached, BadAccess is
577*4882a593Smuzhiyun    returned.  The status is always 0.
578*4882a593Smuzhiyun
579*4882a593Smuzhiyun
580*4882a593Smuzhiyun
581*4882a593Smuzhiyun5. Events
582*4882a593Smuzhiyun
583*4882a593Smuzhiyun    No new events are defined by this extension.
584*4882a593Smuzhiyun
585*4882a593Smuzhiyun
586*4882a593Smuzhiyun
587*4882a593Smuzhiyun6. Errors
588*4882a593Smuzhiyun
589*4882a593Smuzhiyun    No new events are defined by this extension.
590*4882a593Smuzhiyun
591*4882a593Smuzhiyun
592*4882a593Smuzhiyun
593*4882a593Smuzhiyun7. Encoding
594*4882a593Smuzhiyun
595*4882a593Smuzhiyun    Deprecated DMX opcodes:
596*4882a593Smuzhiyun        DMXGetScreenInformation           2
597*4882a593Smuzhiyun        DMXForceWindowCreation            6
598*4882a593Smuzhiyun        DMXReconfigureScreen              7
599*4882a593Smuzhiyun
600*4882a593Smuzhiyun    Valid DMX opcodes:
601*4882a593Smuzhiyun        DMXQueryVersion                   0
602*4882a593Smuzhiyun        DMXSync                           8
603*4882a593Smuzhiyun        DMXForceWindowCreation            9
604*4882a593Smuzhiyun
605*4882a593Smuzhiyun        DMXGetScreenCount                 1
606*4882a593Smuzhiyun        DMXGetScreenAttributes           10
607*4882a593Smuzhiyun        DMXChangeScreensAttributes       11
608*4882a593Smuzhiyun        DMXAddScreen                     12
609*4882a593Smuzhiyun        DMXRemoveScreen                  13
610*4882a593Smuzhiyun
611*4882a593Smuzhiyun        DMXGetWindowAttributes            3
612*4882a593Smuzhiyun
613*4882a593Smuzhiyun        DMXGetDesktopAttributes          14
614*4882a593Smuzhiyun        DMXChangeDesktopAttributes       15
615*4882a593Smuzhiyun
616*4882a593Smuzhiyun        DMXGetInputCount                  4
617*4882a593Smuzhiyun        DMXGetInputAttributes             5
618*4882a593Smuzhiyun        DMXAddInput                      16
619*4882a593Smuzhiyun        DMXRemoveInput                   17
620*4882a593Smuzhiyun
621*4882a593Smuzhiyun    DMXQueryVersion
622*4882a593Smuzhiyun        1           CARD8           opcode (X assigned)
623*4882a593Smuzhiyun        1           0               DMX opcode (X_DMXQueryVersion)
624*4882a593Smuzhiyun        2           1               request length
625*4882a593Smuzhiyun    ==>
626*4882a593Smuzhiyun        1           1               Reply
627*4882a593Smuzhiyun        1                           unused
628*4882a593Smuzhiyun        2           CARD16          sequence number
629*4882a593Smuzhiyun        4           0               reply length
630*4882a593Smuzhiyun        4           CARD32          majorVersion
631*4882a593Smuzhiyun        4           CARD32          minorVersion
632*4882a593Smuzhiyun        4           CARD32          patchVersion
633*4882a593Smuzhiyun        12                          unused
634*4882a593Smuzhiyun
635*4882a593Smuzhiyun    DMXSync
636*4882a593Smuzhiyun        1           CARD8           opcode (X assigned)
637*4882a593Smuzhiyun        1           8               DMX opcode (X_DMXSync)
638*4882a593Smuzhiyun        2           1               request length
639*4882a593Smuzhiyun    ==>
640*4882a593Smuzhiyun        1           1               Reply
641*4882a593Smuzhiyun        1                           unused
642*4882a593Smuzhiyun        2           CARD16          sequence number
643*4882a593Smuzhiyun        4           0               reply length
644*4882a593Smuzhiyun        4           CARD32          status
645*4882a593Smuzhiyun        20                          unused
646*4882a593Smuzhiyun
647*4882a593Smuzhiyun    DMXForceWindowCreation
648*4882a593Smuzhiyun        1           CARD8           opcode (X assigned)
649*4882a593Smuzhiyun        1           9               DMX opcode (X_DMXForceWindowCreation)
650*4882a593Smuzhiyun        2           2               request length
651*4882a593Smuzhiyun        4           CARD32          window
652*4882a593Smuzhiyun    ==>
653*4882a593Smuzhiyun        1           1               Reply
654*4882a593Smuzhiyun        1                           unused
655*4882a593Smuzhiyun        2           CARD16          sequence number
656*4882a593Smuzhiyun        4           0               reply length
657*4882a593Smuzhiyun        4           CARD32          status
658*4882a593Smuzhiyun        20                          unused
659*4882a593Smuzhiyun
660*4882a593Smuzhiyun
661*4882a593Smuzhiyun    DMXGetScreenCount
662*4882a593Smuzhiyun        1           CARD8           opcode (X assigned)
663*4882a593Smuzhiyun        1           1               DMX opcode (X_DMXGetScreenCount)
664*4882a593Smuzhiyun        2           1               request length
665*4882a593Smuzhiyun    ==>
666*4882a593Smuzhiyun        1           1               Reply
667*4882a593Smuzhiyun        1                           unused
668*4882a593Smuzhiyun        2           CARD16          sequence number
669*4882a593Smuzhiyun        4           0               reply length
670*4882a593Smuzhiyun        4           CARD32          screenCount
671*4882a593Smuzhiyun        20                          unused
672*4882a593Smuzhiyun
673*4882a593Smuzhiyun    DMXGetScreenAttributes
674*4882a593Smuzhiyun        1           CARD8           opcode (X assigned)
675*4882a593Smuzhiyun        1           10               DMX opcode (X_DMXGetScreenAttributes)
676*4882a593Smuzhiyun        2           2               request length
677*4882a593Smuzhiyun        4           CARD32          physicalScreen
678*4882a593Smuzhiyun    ==>
679*4882a593Smuzhiyun        1           1               Reply
680*4882a593Smuzhiyun        1                           unused
681*4882a593Smuzhiyun        2           CARD16          sequence number
682*4882a593Smuzhiyun        4           1+(n+p)/4       reply length
683*4882a593Smuzhiyun        4           n               displayNameLength
684*4882a593Smuzhiyun        4           CARD32          logicalScreen
685*4882a593Smuzhiyun        2           CARD16          screenWindowWidth
686*4882a593Smuzhiyun        2           CARD16          screenWindowHeight
687*4882a593Smuzhiyun        2           INT16           screenWindowXoffset
688*4882a593Smuzhiyun        2           INT16           screenWindowYoffset
689*4882a593Smuzhiyun        2           CARD16          rootWindowWidth
690*4882a593Smuzhiyun        2           CARD16          rootWindowHeight
691*4882a593Smuzhiyun        2           INT16           rootWindowXoffset
692*4882a593Smuzhiyun        2           INT16           rootWindowYoffset
693*4882a593Smuzhiyun        2           INT16           rootWindowXorigin
694*4882a593Smuzhiyun        2           INT16           rootWindowYorigin
695*4882a593Smuzhiyun        n                           displayName
696*4882a593Smuzhiyun        p                           pad(n)
697*4882a593Smuzhiyun
698*4882a593Smuzhiyun    DMXChangeScreensAttributes
699*4882a593Smuzhiyun        1           CARD8           opcode (X assigned)
700*4882a593Smuzhiyun        1           11              DMX opcode (X_DMXChangeScreenAttributes)
701*4882a593Smuzhiyun        2           3+s+m+n         request length
702*4882a593Smuzhiyun        4           s               screenCount
703*4882a593Smuzhiyun        4           m               maskCount
704*4882a593Smuzhiyun        4s          LISTofCARD32    screens
705*4882a593Smuzhiyun        4m          LISTofCARD32    valueMasks
706*4882a593Smuzhiyun        4n          LISTofVALUES    valueList
707*4882a593Smuzhiyun    ==>
708*4882a593Smuzhiyun        1           1               Reply
709*4882a593Smuzhiyun        1                           unused
710*4882a593Smuzhiyun        2           CARD16          sequence number
711*4882a593Smuzhiyun        4           0               reply length
712*4882a593Smuzhiyun        4           CARD32          status
713*4882a593Smuzhiyun        4           CARD32          errorScreen
714*4882a593Smuzhiyun        16                          unused
715*4882a593Smuzhiyun
716*4882a593Smuzhiyun
717*4882a593Smuzhiyun    DMXAddScreen
718*4882a593Smuzhiyun        1           CARD8           opcode (X assigned)
719*4882a593Smuzhiyun        1           12              DMX opcode (X_DMXAddScreen)
720*4882a593Smuzhiyun        2           3+m+(n+p)/4     request length
721*4882a593Smuzhiyun        4           n               displayNameLength
722*4882a593Smuzhiyun        4           CARD32          physicalScreen
723*4882a593Smuzhiyun        4           CARD32          valueMask
724*4882a593Smuzhiyun        4m          LISTofVALUES    valueList
725*4882a593Smuzhiyun        n                           displayName
726*4882a593Smuzhiyun        p                           pad(n)
727*4882a593Smuzhiyun    ==>
728*4882a593Smuzhiyun        1           1               Reply
729*4882a593Smuzhiyun        1                           unused
730*4882a593Smuzhiyun        2           CARD16          sequence number
731*4882a593Smuzhiyun        4           0               reply length
732*4882a593Smuzhiyun        4           CARD32          status
733*4882a593Smuzhiyun        4           CARD32          physicalScreen
734*4882a593Smuzhiyun        16                          unused
735*4882a593Smuzhiyun
736*4882a593Smuzhiyun    DMXRemoveScreen
737*4882a593Smuzhiyun        1           CARD8           opcode (X assigned)
738*4882a593Smuzhiyun        1           13              DMX opcode (X_DMXRemoveScreen)
739*4882a593Smuzhiyun        2           2               request length
740*4882a593Smuzhiyun        4           CARD32          physicalScreen
741*4882a593Smuzhiyun    ==>
742*4882a593Smuzhiyun        1           1               Reply
743*4882a593Smuzhiyun        1                           unused
744*4882a593Smuzhiyun        2           CARD16          sequence number
745*4882a593Smuzhiyun        4           0               reply length
746*4882a593Smuzhiyun        4           CARD32          status
747*4882a593Smuzhiyun        20                          unused
748*4882a593Smuzhiyun
749*4882a593Smuzhiyun    DMXGetWindowAttributes
750*4882a593Smuzhiyun        1           CARD8           opcode (X assigned)
751*4882a593Smuzhiyun        1           3               DMX opcode (X_DMXGetWindowAttributes)
752*4882a593Smuzhiyun        2           2               request length
753*4882a593Smuzhiyun        4           CARD32          window
754*4882a593Smuzhiyun    ==>
755*4882a593Smuzhiyun        1           1               Reply
756*4882a593Smuzhiyun        1                           unused
757*4882a593Smuzhiyun        2           CARD16          sequence number
758*4882a593Smuzhiyun        4           n*6             reply length
759*4882a593Smuzhiyun        4           n               screenCount
760*4882a593Smuzhiyun        20                          unused
761*4882a593Smuzhiyun        n*4         LISTofCARD32    screens
762*4882a593Smuzhiyun        n*4         LISTofCARD32    windows
763*4882a593Smuzhiyun        n*8         LISTofRECTANGLE pos
764*4882a593Smuzhiyun        n*8         LISTofRECTANGLE vis
765*4882a593Smuzhiyun
766*4882a593Smuzhiyun    DMXGetDesktopAttributes
767*4882a593Smuzhiyun        1           CARD8           opcode (X assigned)
768*4882a593Smuzhiyun        1           14              DMX opcode (X_DMXGetDesktopAttributes)
769*4882a593Smuzhiyun        2           1               request length
770*4882a593Smuzhiyun    ==>
771*4882a593Smuzhiyun        1           1               Reply
772*4882a593Smuzhiyun        1                           unused
773*4882a593Smuzhiyun        2           CARD16          sequence number
774*4882a593Smuzhiyun        4           0               reply length
775*4882a593Smuzhiyun        2           INT16           width
776*4882a593Smuzhiyun        2           INT16           height
777*4882a593Smuzhiyun        2           INT16           shiftX
778*4882a593Smuzhiyun        2           INT16           shiftY
779*4882a593Smuzhiyun        16                          unused
780*4882a593Smuzhiyun
781*4882a593Smuzhiyun    DMXChangeDesktopAttributes
782*4882a593Smuzhiyun        1           CARD8           opcode (X assigned)
783*4882a593Smuzhiyun        1           15              DMX opcode (X_DMXChangeDesktopAttributes)
784*4882a593Smuzhiyun        2           2+n             request length
785*4882a593Smuzhiyun        4           BITMASK         valueMask
786*4882a593Smuzhiyun        4n          LISTofVALUES    valueList
787*4882a593Smuzhiyun    ==>
788*4882a593Smuzhiyun        1           1               Reply
789*4882a593Smuzhiyun        1                           unused
790*4882a593Smuzhiyun        2           CARD16          sequence number
791*4882a593Smuzhiyun        4           0               reply length
792*4882a593Smuzhiyun        4           CARD32          status
793*4882a593Smuzhiyun        20                          unused
794*4882a593Smuzhiyun
795*4882a593Smuzhiyun    DMXGetInputCount
796*4882a593Smuzhiyun        1           CARD8           opcode (X assigned)
797*4882a593Smuzhiyun        1           4               DMX opcode (X_DMXGetInputCount)
798*4882a593Smuzhiyun        2           1               request length
799*4882a593Smuzhiyun    ==>
800*4882a593Smuzhiyun        1           1               Reply
801*4882a593Smuzhiyun        1                           unused
802*4882a593Smuzhiyun        2           CARD16          sequence number
803*4882a593Smuzhiyun        4           0               reply length
804*4882a593Smuzhiyun        4           CARD32          inputCount
805*4882a593Smuzhiyun        20                          unused
806*4882a593Smuzhiyun
807*4882a593Smuzhiyun    DMXGetInputAttributes
808*4882a593Smuzhiyun        1           CARD8           opcode (X assigned)
809*4882a593Smuzhiyun        1           5               DMX opcode (X_DMXGetInputAttributes)
810*4882a593Smuzhiyun        2           2               request length
811*4882a593Smuzhiyun        4           CARD32          deviceId
812*4882a593Smuzhiyun    ==>
813*4882a593Smuzhiyun        1           1               Reply
814*4882a593Smuzhiyun        1                           unused
815*4882a593Smuzhiyun        2           CARD16          sequence number
816*4882a593Smuzhiyun        4           (n+p)/4         reply length
817*4882a593Smuzhiyun        4           CARD32          inputType
818*4882a593Smuzhiyun        4           CARD32          physicalScreen
819*4882a593Smuzhiyun        4           CARD32          physicalId
820*4882a593Smuzhiyun        4           n               nameLength
821*4882a593Smuzhiyun        1           BOOL            isCore
822*4882a593Smuzhiyun        1           BOOL            sendsCore
823*4882a593Smuzhiyun        1           BOOL            detached
824*4882a593Smuzhiyun        5                           unused
825*4882a593Smuzhiyun        n                           name
826*4882a593Smuzhiyun        p                           pad(n)
827*4882a593Smuzhiyun
828*4882a593Smuzhiyun    DMXAddInput
829*4882a593Smuzhiyun        1           CARD8           opcode (X assigned)
830*4882a593Smuzhiyun        1           16              DMX opcode (X_DMXAddInput)
831*4882a593Smuzhiyun        2           3+m+(n+p)/4     request length
832*4882a593Smuzhiyun        4           n               displayNameLength
833*4882a593Smuzhiyun        4           CARD32          valueMask
834*4882a593Smuzhiyun        4m          LISTofVALUES    valueList
835*4882a593Smuzhiyun        n                           displayName
836*4882a593Smuzhiyun        p                           pad(n)
837*4882a593Smuzhiyun    ==>
838*4882a593Smuzhiyun        1           1               Reply
839*4882a593Smuzhiyun        1                           unused
840*4882a593Smuzhiyun        2           CARD16          sequence number
841*4882a593Smuzhiyun        4           0               reply length
842*4882a593Smuzhiyun        4           CARD32          status
843*4882a593Smuzhiyun        4           CARD32          physicalId
844*4882a593Smuzhiyun        16                          unused
845*4882a593Smuzhiyun
846*4882a593Smuzhiyun    DMXRemoveInput
847*4882a593Smuzhiyun        1           CARD8           opcode (X assigned)
848*4882a593Smuzhiyun        1           17              DMX opcode (X_DMXRemoveInput)
849*4882a593Smuzhiyun        2           3               request length
850*4882a593Smuzhiyun        4           CARD32          physicalId
851*4882a593Smuzhiyun    ==>
852*4882a593Smuzhiyun        1           1               Reply
853*4882a593Smuzhiyun        1                           unused
854*4882a593Smuzhiyun        2           CARD16          sequence number
855*4882a593Smuzhiyun        4           0               reply length
856*4882a593Smuzhiyun        4           CARD32          status
857*4882a593Smuzhiyun        20                          unused
858*4882a593Smuzhiyun
859*4882a593Smuzhiyun
860*4882a593Smuzhiyun8. Changes to existing requests/replies/events
861*4882a593Smuzhiyun
862*4882a593Smuzhiyun    No changes to existing requests, replies, or events are necessitated
863*4882a593Smuzhiyun    by this extension.
864*4882a593Smuzhiyun
865*4882a593Smuzhiyun
866*4882a593Smuzhiyun
867*4882a593Smuzhiyun9. Acknowledgments
868*4882a593Smuzhiyun
869*4882a593Smuzhiyun
870*4882a593Smuzhiyun
871*4882a593Smuzhiyun10. References
872*4882a593Smuzhiyun
873*4882a593Smuzhiyun    [X11R6.4] Robert W. Sheifler.  X Window System Protocol, X Consortium
874*4882a593Smuzhiyun              Standard, X Version 11, Release 6.4.  Available from
875*4882a593Smuzhiyun              xc/doc/specs/XProtocol and xc/doc/hardcopy/XProtocol.
876