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