1
2
3            Client-to-Server DMX Extension to the X Protocol
4
5           $Date$, $Revision$
6
7               Rickard E. (Rik) Faith (faith@redhat.com)
8                    Kevin E. Martin (kem@redhat.com)
9
10    Copyright 2002-2004 Red Hat Inc., Raleigh, North Carolina.
11
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:
19
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.
23
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.
32
33
34
351. Overview
36
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.
41
42    The name for this extension is "DMX".
43
44
45
462. Syntactic conventions
47
48    This document uses the same syntactic conventions requests and data
49    types as [X11R6.4].
50
51
52
533. Data types
54
55    No new data types are defined by this extension.  All data types
56    referenced in this document are defined in [X11R6.4].
57
58
59
604. Requests
61
62    DMXQueryVersion
63        ==>
64        majorVersion: CARD32
65        minorVersion: CARD32
66        patchVersion: CARD32
67
68        Errors: None
69
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).
73
74    Any incompatible changes to the protocol should be indicated by
75    incrementing majorVersion.
76
77    Small, upward-compatible changes should be indicated by incrementing
78    minorVersion.
79
80    Servers that support the protocol defined in this document will
81    return a majorVersion of 2 and a minorVersion of 2.
82
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.)
85
86
87
88    DMXSync
89        ==>
90        status: CARD32
91
92        Errors: None
93
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.
98
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.
104
105    The value of status is always 0.
106
107
108
109    DMXForceWindowCreation
110        window: CARD32
111        ==>
112        status: CARD32
113
114        Errors: Window
115
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.
120
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.
124
125    The value of status is always 0.
126
127
128
129
130    DMXGetScreenCount
131        ==>
132        screenCount: CARD32
133
134        Errors: None
135
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.
144
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
148
149
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
165
166        Errors: Value
167
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.
171
172    This request returns attributes about a single DMX screen.
173
174    The physicalScreen value is between 0 and screenCount-1, inclusive
175    (values outside this range will result in a Value error).
176
177    The displayname is the name used to open the display, either from
178    the Xdmx command-line or from the configuration file.
179
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.
186
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.
190
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.)
198
199
200
201    DMXChangeScreensAttributes
202        screenCount: CARD32
203        maskCount: CARD32
204        screens: LISTofCARD32
205        valueMasks: LISTofCARD32
206        valueList: LISTofVALUES
207        ==>
208        status: CARD32
209        errorScreen: CARD32
210
211        Errors: Length, Alloc
212
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.)
217
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:
223
224        Attribute               Type
225
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
236
237    The attribute values have the same meaning as do the corresponding
238    values for DMXGetScreenAttributes.
239
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.
246
247
248
249    DMXAddScreen
250        displayName: STRING8
251        physicalScreen: CARD32
252        valueMask: CARD32
253        valueList: LISTofVALUES
254        ==>
255        status: CARD32
256        physicalScreen: CARD32
257
258        Errors: Length, Alloc, Value
259
260    This request was first supported in version 2.2 of this protocol.
261
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.
268
269    The valueMask and valueList specify the attributes to be used.  The
270    possible values are:
271
272        Attribute               Type
273
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
284
285    The attribute values have the same meaning as do the corresponding
286    values for DMXGetScreenAttributes.
287
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.
302
303
304
305    DMXRemoveScreen
306        physicalScreen: CARD32
307        ==>
308        status: CARD32
309
310        Errors: None
311
312    This request was first supported in version 2.2 of this protocol.
313
314    This request detaches the physicalScreen screen.
315
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.
322
323
324
325    DMXGetWindowAttributes
326        window: CARD32
327        ==>
328        screenCount: CARD32
329        screens: LISTofCARD32
330        windows: LISTofCARD32
331        pos: LISTofRECTANGLE
332        vis: LISTofRECTANGLE
333
334        Errors: Window, Alloc
335
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.
341
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.
360
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
366
367    In this case, the DMXGetWindowAttributes call would return the
368    following information for the 500x500 window:
369
370    display A: 500x500 window at 1024-250,0 (relative to back end)
371               with 250x500 visible at 0,0 (relative to window origin)
372
373    display B: 500x500 window at -250,0 (relative to back end)
374               with 250x500 visible at 250,0 (relative to window origin)
375
376    display C: 500x500 window at 1024-250,-768 with 0x0 visible at 0,0
377
378    display D: 500x500 window at -250,-768 with 0x0 visible at 0,0
379
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.
385
386
387
388    DMXGetDesktopAttributes
389        ==>
390        width: INT16
391        height: INT16
392        shiftX: INT16
393        shiftY: INT16
394
395        Errors: None
396
397    This request was first supported in version 2.0 of this protocol.
398
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.
404
405
406
407    DMXChangeDesktopAttributes
408        valueMask: BITMASK
409        valueList: LISTofVALUE
410        ==>
411        status: CARD32
412
413        Errors: Length, Value
414
415    This request was first supported in version 2.0 of this protocol.
416
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:
421
422        Attriubute      Type
423
424        Width           INT16
425        Height          INT16
426        ShiftX          INT16
427        ShiftY          INT16
428
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.
436
437    All coordinants are in the global DMX coordinant system.  If
438    Xinerama is not active, this request is not useful.
439
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
443
444
445
446    DMXGetInputCount
447        ==>
448        inputCount: CARD32
449
450    This request was first supported in version 1.1 of this protocol.
451
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.
456
457
458
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
469
470        Errors: Value
471
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.
478
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).
484
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.
490
491    For local devices, all other fields returned, except isCore and
492    sendsCore, are invalid.
493
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.
497
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).
504
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.
511
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.
515
516
517
518    DMXAddInput
519        displayName: STRING8
520        valueMask: CARD32
521        valueList: LISTofVALUES
522        ==>
523        status: CARD32
524        physicalId: CARD32
525
526        Errors: Value, Access
527
528    This request was first supported in version 2.2 of this protocol.
529
530    The valueMask and valueList specify the attributes to be used.  The
531    possible values are:
532
533        Attribute               Type
534
535        InputType               CARD32
536        InputPhysicalScreen     CARD32
537        InputSendsCore          BOOL
538
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.
547
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.
552
553    If InputSendsCore is True, the new device will be added as a true
554    core device.
555
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).
559
560
561
562    DMXRemoveInput
563        physicalId: CARD32
564        ==>
565        status: CARD32
566
567        Errors: Value, Access
568
569    This request was first supported in version 2.2 of this protocol.
570
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.
578
579
580
5815. Events
582
583    No new events are defined by this extension.
584
585
586
5876. Errors
588
589    No new events are defined by this extension.
590
591
592
5937. Encoding
594
595    Deprecated DMX opcodes:
596        DMXGetScreenInformation           2
597        DMXForceWindowCreation            6
598        DMXReconfigureScreen              7
599
600    Valid DMX opcodes:
601        DMXQueryVersion                   0
602        DMXSync                           8
603        DMXForceWindowCreation            9
604
605        DMXGetScreenCount                 1
606        DMXGetScreenAttributes           10
607        DMXChangeScreensAttributes       11
608        DMXAddScreen                     12
609        DMXRemoveScreen                  13
610
611        DMXGetWindowAttributes            3
612
613        DMXGetDesktopAttributes          14
614        DMXChangeDesktopAttributes       15
615
616        DMXGetInputCount                  4
617        DMXGetInputAttributes             5
618        DMXAddInput                      16
619        DMXRemoveInput                   17
620
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
634
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
646
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
659
660
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
672
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)
697
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
715
716
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
735
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
748
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
765
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
780
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
794
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
806
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)
827
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
845
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
858
859
8608. Changes to existing requests/replies/events
861
862    No changes to existing requests, replies, or events are necessitated
863    by this extension.
864
865
866
8679. Acknowledgments
868
869
870
87110. References
872
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.
876