xinput: UngrabDevice-request: add pad at end
[free-sw/xcb/proto] / src / xkb.xml
1 <?xml version="1.0" encoding="utf-8" ?>
2 <!--
3 Copyright (C) 2009 Open Text Corporation.  All Rights Reserved.
4
5 Permission is hereby granted, free of charge, to any person obtaining a copy
6 of this software and associated documentation files (the "Software"), to deal
7 in the Software without restriction, including without limitation the rights
8 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 copies of the Software, and to permit persons to whom the Software is
10 furnished to do so, subject to the following conditions:
11
12 The above copyright notice and this permission notice shall be included in all
13 copies or substantial portions of the Software.
14
15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
19 ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
22 Except as contained in this notice, the names of the authors or their
23 institutions shall not be used in advertising or otherwise to promote the
24 sale, use or other dealings in this Software without prior written
25 authorization from the authors.
26 -->
27 <xcb header="xkb" extension-xname="XKEYBOARD" extension-name="xkb"
28         major-version="1" minor-version="0">
29
30         <import>xproto</import>
31
32         <!-- Common Types -->
33         <enum name="Const">
34                 <item name="MaxLegalKeyCode"> <value>255</value> </item>
35                 <item name="PerKeyBitArraySize">
36                         <value>32</value>
37                 </item>
38                 <item name="KeyNameLength">
39                         <value>4</value>
40                 </item>
41         </enum>
42
43         <enum name="EventType">
44                 <item name="NewKeyboardNotify">      <bit>0</bit> </item>
45                 <item name="MapNotify">              <bit>1</bit> </item>
46                 <item name="StateNotify">            <bit>2</bit> </item>
47                 <item name="ControlsNotify">         <bit>3</bit> </item>
48                 <item name="IndicatorStateNotify">   <bit>4</bit> </item>
49                 <item name="IndicatorMapNotify">     <bit>5</bit> </item>
50                 <item name="NamesNotify">            <bit>6</bit> </item>
51                 <item name="CompatMapNotify">        <bit>7</bit> </item>
52                 <item name="BellNotify">             <bit>8</bit> </item>
53                 <item name="ActionMessage">          <bit>9</bit> </item>
54                 <item name="AccessXNotify">          <bit>10</bit> </item>
55                 <item name="ExtensionDeviceNotify">  <bit>11</bit> </item>
56         </enum>
57
58         <enum name="NKNDetail">
59                 <item name="Keycodes"> <bit>0</bit> </item>
60                 <item name="Geometry"> <bit>1</bit> </item>
61                 <item name="DeviceID"> <bit>2</bit> </item>
62         </enum>
63
64         <enum name="AXNDetail">
65                 <item name="SKPress">      <bit>0</bit> </item>
66                 <item name="SKAccept">     <bit>1</bit> </item>
67                 <item name="SKReject">     <bit>2</bit> </item>
68                 <item name="SKRelease">    <bit>3</bit> </item>
69                 <item name="BKAccept">     <bit>4</bit> </item>
70                 <item name="BKReject">     <bit>5</bit> </item>
71                 <item name="AXKWarning">   <bit>6</bit> </item>
72         </enum>
73
74         <enum name="MapPart">
75                 <item name="KeyTypes">            <bit>0</bit> </item>
76                 <item name="KeySyms">             <bit>1</bit> </item>
77                 <item name="ModifierMap">         <bit>2</bit> </item>
78                 <item name="ExplicitComponents">  <bit>3</bit> </item>
79                 <item name="KeyActions">          <bit>4</bit> </item>
80                 <item name="KeyBehaviors">        <bit>5</bit> </item>
81                 <item name="VirtualMods">         <bit>6</bit> </item>
82                 <item name="VirtualModMap">       <bit>7</bit> </item>
83         </enum>
84
85         <enum name="SetMapFlags">
86                 <item name="ResizeTypes">       <bit>0</bit> </item>
87                 <item name="RecomputeActions">  <bit>1</bit> </item>
88         </enum>
89
90         <enum name="StatePart">
91                 <item name="ModifierState">     <bit>0</bit> </item>
92                 <item name="ModifierBase">      <bit>1</bit> </item>
93                 <item name="ModifierLatch">     <bit>2</bit> </item>
94                 <item name="ModifierLock">      <bit>3</bit> </item>
95                 <item name="GroupState">        <bit>4</bit> </item>
96                 <item name="GroupBase">         <bit>5</bit> </item>
97                 <item name="GroupLatch">        <bit>6</bit> </item>
98                 <item name="GroupLock">         <bit>7</bit> </item>
99                 <item name="CompatState">       <bit>8</bit> </item>
100                 <item name="GrabMods">          <bit>9</bit> </item>
101                 <item name="CompatGrabMods">    <bit>10</bit> </item>
102                 <item name="LookupMods">        <bit>11</bit> </item>
103                 <item name="CompatLookupMods">  <bit>12</bit> </item>
104                 <item name="PointerButtons">    <bit>13</bit> </item>
105         </enum>
106
107         <enum name="BoolCtrl">
108                 <item name="RepeatKeys">           <bit>0</bit> </item>
109                 <item name="SlowKeys">             <bit>1</bit> </item>
110                 <item name="BounceKeys">           <bit>2</bit> </item>
111                 <item name="StickyKeys">           <bit>3</bit> </item>
112                 <item name="MouseKeys">            <bit>4</bit> </item>
113                 <item name="MouseKeysAccel">       <bit>5</bit> </item>
114                 <item name="AccessXKeys">          <bit>6</bit> </item>
115                 <item name="AccessXTimeoutMask">   <bit>7</bit> </item>
116                 <item name="AccessXFeedbackMask">  <bit>8</bit> </item>
117                 <item name="AudibleBellMask">      <bit>9</bit> </item>
118                 <item name="Overlay1Mask">         <bit>10</bit> </item>
119                 <item name="Overlay2Mask">         <bit>11</bit> </item>
120                 <item name="IgnoreGroupLockMask">  <bit>12</bit> </item>
121         </enum>
122
123         <!-- XXX: one zero less than XKB specification says,
124                   uses the same values as libX11 -->
125         <enum name="Control" >
126                 <item name="GroupsWrap">      <bit>27</bit> </item>
127                 <item name="InternalMods">    <bit>28</bit> </item>
128                 <item name="IgnoreLockMods">  <bit>29</bit> </item>
129                 <item name="PerKeyRepeat">    <bit>30</bit> </item>
130                 <item name="ControlsEnabled"> <bit>31</bit> </item>
131         </enum>
132
133         <enum name="AXOption">
134                 <item name="SKPressFB">     <bit>0</bit> </item>
135                 <item name="SKAcceptFB">    <bit>1</bit> </item>
136                 <item name="FeatureFB">     <bit>2</bit> </item>
137                 <item name="SlowWarnFB">    <bit>3</bit> </item>
138                 <item name="IndicatorFB">   <bit>4</bit> </item>
139                 <item name="StickyKeysFB">  <bit>5</bit> </item>
140                 <item name="TwoKeys">       <bit>6</bit> </item>
141                 <item name="LatchToLock">   <bit>7</bit> </item>
142                 <item name="SKReleaseFB">   <bit>8</bit> </item>
143                 <item name="SKRejectFB">    <bit>9</bit> </item>
144                 <item name="BKRejectFB">    <bit>10</bit> </item>
145                 <item name="DumbBell">      <bit>11</bit> </item>
146         </enum>
147
148         <typedef oldname="CARD16" newname="DeviceSpec" />
149
150         <enum name="LedClassResult">
151                 <item name="KbdFeedbackClass"> <value>0</value> </item>
152                 <item name="LedFeedbackClass"> <value>4</value> </item>
153         </enum>
154
155         <enum name="LedClass">
156                 <item name="KbdFeedbackClass"> <value>0</value> </item>
157                 <item name="LedFeedbackClass"> <value>4</value> </item>
158                 <item name="DfltXIClass">      <value>768</value> </item>       <!--0x300-->
159                 <item name="AllXIClasses">     <value>1280</value> </item>      <!--0x500-->
160         </enum>
161         <typedef oldname="CARD16" newname="LedClassSpec" />
162
163         <enum name="BellClassResult">
164                 <item name="KbdFeedbackClass">  <value>0</value> </item>
165                 <item name="BellFeedbackClass"> <value>5</value> </item>
166         </enum>
167
168         <enum name="BellClass">
169                 <item name="KbdFeedbackClass">  <value>0</value> </item>
170                 <item name="BellFeedbackClass"> <value>5</value> </item>
171                 <item name="DfltXIClass">       <value>768</value> </item>      <!--0x300-->
172         </enum>
173         <typedef oldname="CARD16" newname="BellClassSpec" />
174
175         <enum name="ID">
176                 <item name="UseCoreKbd">  <value>256</value> </item>    <!-- 0x100 -->
177                 <item name="UseCorePtr">  <value>512</value> </item>    <!-- 0x200 -->
178                 <item name="DfltXIClass"> <value>768</value> </item>    <!-- 0x300 -->
179                 <item name="DfltXIId">   <value>1024</value> </item>    <!-- 0x400 -->
180                 <item name="AllXIClass"> <value>1280</value> </item>    <!-- 0x500 -->
181                 <item name="AllXIId">    <value>1536</value> </item>    <!-- 0x600 -->
182                 <item name="XINone">     <value>65280</value> </item>   <!--0xff00-->
183         </enum>
184         <typedef oldname="CARD16" newname="IDSpec" />
185
186         <enum name="Group">
187                 <item name="1"> <value>0</value> </item>
188                 <item name="2"> <value>1</value> </item>
189                 <item name="3"> <value>2</value> </item>
190                 <item name="4"> <value>3</value> </item>
191         </enum>
192
193         <enum name="Groups">
194                 <item name="Any"> <value>254</value> </item>
195                 <item name="All"> <value>255</value> </item>
196         </enum>
197
198         <enum name="SetOfGroup">
199                 <item name="Group1"> <bit>0</bit> </item>
200                 <item name="Group2"> <bit>1</bit> </item>
201                 <item name="Group3"> <bit>2</bit> </item>
202                 <item name="Group4"> <bit>3</bit> </item>
203         </enum>
204
205         <enum name="SetOfGroups">
206                 <item name="Any"> <bit>7</bit> </item>
207         </enum>
208
209         <enum name="GroupsWrap">
210                 <item name="WrapIntoRange">     <value>0</value> </item>
211                 <item name="ClampIntoRange">    <bit>6</bit> </item>
212                 <item name="RedirectIntoRange"> <bit>7</bit> </item>
213         </enum>
214
215         <enum name="VModsHigh">
216                 <item name="15"> <bit>7</bit> </item>
217                 <item name="14"> <bit>6</bit> </item>
218                 <item name="13"> <bit>5</bit> </item>
219                 <item name="12"> <bit>4</bit> </item>
220                 <item name="11"> <bit>3</bit> </item>
221                 <item name="10"> <bit>2</bit> </item>
222                 <item name="9">  <bit>1</bit> </item>
223                 <item name="8">  <bit>0</bit> </item>
224         </enum>
225
226         <enum name="VModsLow">
227                 <item name="7"> <bit>7</bit> </item>
228                 <item name="6"> <bit>6</bit> </item>
229                 <item name="5"> <bit>5</bit> </item>
230                 <item name="4"> <bit>4</bit> </item>
231                 <item name="3"> <bit>3</bit> </item>
232                 <item name="2"> <bit>2</bit> </item>
233                 <item name="1"> <bit>1</bit> </item>
234                 <item name="0"> <bit>0</bit> </item>
235         </enum>
236
237         <enum name="VMod">
238                 <item name="15"> <bit>15</bit> </item>
239                 <item name="14"> <bit>14</bit> </item>
240                 <item name="13"> <bit>13</bit> </item>
241                 <item name="12"> <bit>12</bit> </item>
242                 <item name="11"> <bit>11</bit> </item>
243                 <item name="10"> <bit>10</bit> </item>
244                 <item name="9">  <bit>9</bit> </item>
245                 <item name="8">  <bit>8</bit> </item>
246                 <item name="7">  <bit>7</bit> </item>
247                 <item name="6">  <bit>6</bit> </item>
248                 <item name="5">  <bit>5</bit> </item>
249                 <item name="4">  <bit>4</bit> </item>
250                 <item name="3">  <bit>3</bit> </item>
251                 <item name="2">  <bit>2</bit> </item>
252                 <item name="1">  <bit>1</bit> </item>
253                 <item name="0">  <bit>0</bit> </item>
254         </enum>
255
256         <enum name="Explicit">
257                 <item name="VModMap">     <bit>7</bit> </item>
258                 <item name="Behavior">    <bit>6</bit> </item>
259                 <item name="AutoRepeat">  <bit>5</bit> </item>
260                 <item name="Interpret">   <bit>4</bit> </item>
261                 <item name="KeyType4">    <bit>3</bit> </item>
262                 <item name="KeyType3">    <bit>2</bit> </item>
263                 <item name="KeyType2">    <bit>1</bit> </item>
264                 <item name="KeyType1">    <bit>0</bit> </item>
265         </enum>
266
267         <enum name="SymInterpretMatch">
268                 <item name="NoneOf">      <value>0</value> </item>
269                 <item name="AnyOfOrNone"> <value>1</value> </item>
270                 <item name="AnyOf">       <value>2</value> </item>
271                 <item name="AllOf">       <value>3</value> </item>
272                 <item name="Exactly">     <value>4</value> </item>
273         </enum>
274
275         <enum name="SymInterpMatch">
276                 <item name="LevelOneOnly"> <bit>7</bit> </item>
277                 <item name="OpMask">       <value>127</value> </item>   <!--0x7f-->
278         </enum>
279
280         <enum name="IMFlag">
281                 <item name="NoExplicit">  <bit>7</bit> </item>
282                 <item name="NoAutomatic"> <bit>6</bit> </item>
283                 <item name="LEDDrivesKB"> <bit>5</bit> </item>
284         </enum>
285
286         <enum name="IMModsWhich">
287                 <item name="UseCompat">    <bit>4</bit> </item>
288                 <item name="UseEffective"> <bit>3</bit> </item>
289                 <item name="UseLocked">    <bit>2</bit> </item>
290                 <item name="UseLatched">   <bit>1</bit> </item>
291                 <item name="UseBase">      <bit>0</bit> </item>
292         </enum>
293
294         <enum name="IMGroupsWhich">
295                 <item name="UseCompat">    <bit>4</bit> </item>
296                 <item name="UseEffective"> <bit>3</bit> </item>
297                 <item name="UseLocked">    <bit>2</bit> </item>
298                 <item name="UseLatched">   <bit>1</bit> </item>
299                 <item name="UseBase">      <bit>0</bit> </item>
300         </enum>
301
302         <struct name="IndicatorMap">
303                 <field name="flags" type="CARD8" enum="IMFlag" />
304                 <field name="whichGroups" type="CARD8" enum="IMGroupsWhich" />
305                 <field name="groups" type="CARD8" enum="SetOfGroup" />
306                 <field name="whichMods" type="CARD8" enum="IMModsWhich" />
307                 <field name="mods" type="CARD8" mask="ModMask" />
308                 <field name="realMods" type="CARD8" mask="ModMask" />
309                 <field name="vmods" type="CARD16" mask="VMod" />
310                 <field name="ctrls" type="CARD32" mask="BoolCtrl" />
311         </struct>
312
313         <enum name="CMDetail">
314                 <item name="SymInterp">   <bit>0</bit> </item>
315                 <item name="GroupCompat"> <bit>1</bit> </item>
316         </enum>
317
318         <enum name="NameDetail">
319                 <item name="Keycodes">        <bit>0</bit> </item>
320                 <item name="Geometry">        <bit>1</bit> </item>
321                 <item name="Symbols">         <bit>2</bit> </item>
322                 <item name="PhysSymbols">     <bit>3</bit> </item>
323                 <item name="Types">           <bit>4</bit> </item>
324                 <item name="Compat">          <bit>5</bit> </item>
325                 <item name="KeyTypeNames">    <bit>6</bit> </item>
326                 <item name="KTLevelNames">    <bit>7</bit> </item>
327                 <item name="IndicatorNames">  <bit>8</bit> </item>
328                 <item name="KeyNames">        <bit>9</bit> </item>
329                 <item name="KeyAliases">      <bit>10</bit> </item>
330                 <item name="VirtualModNames"> <bit>11</bit> </item>
331                 <item name="GroupNames">      <bit>12</bit> </item>
332                 <item name="RGNames">         <bit>13</bit> </item>
333         </enum>
334
335         <enum name="GBNDetail">
336                 <item name="Types">         <bit>0</bit> </item>
337                 <item name="CompatMap">     <bit>1</bit> </item>
338                 <item name="ClientSymbols"> <bit>2</bit> </item>
339                 <item name="ServerSymbols"> <bit>3</bit> </item>
340                 <item name="IndicatorMaps"> <bit>4</bit> </item>
341                 <item name="KeyNames">      <bit>5</bit> </item>
342                 <item name="Geometry">      <bit>6</bit> </item>
343                 <item name="OtherNames">    <bit>7</bit> </item>
344         </enum>
345
346         <enum name="XIFeature">
347                 <item name="Keyboards">      <bit>0</bit> </item>
348                 <item name="ButtonActions">  <bit>1</bit> </item>
349                 <item name="IndicatorNames"> <bit>2</bit> </item>
350                 <item name="IndicatorMaps">  <bit>3</bit> </item>
351                 <item name="IndicatorState"> <bit>4</bit> </item>
352         </enum>
353
354         <enum name="PerClientFlag">
355                 <item name="DetectableAutoRepeat">   <bit>0</bit> </item>
356                 <item name="GrabsUseXKBState">       <bit>1</bit> </item>
357                 <item name="AutoResetControls">      <bit>2</bit> </item>
358                 <item name="LookupStateWhenGrabbed"> <bit>3</bit> </item>
359                 <item name="SendEventUsesXKBState">  <bit>4</bit> </item>
360         </enum>
361
362         <struct name="ModDef">
363                 <field name="mask" type="CARD8" mask="ModMask" />
364                 <field name="realMods" type="CARD8" mask="ModMask" />
365                 <field name="vmods" type="CARD16" mask="VMod" />
366         </struct>
367
368         <struct name="KeyName">
369                 <list name="name" type="char">
370                         <value>4</value>
371                 </list>
372         </struct>
373
374         <struct name="KeyAlias">
375                 <list name="real" type="char">
376                         <value>4</value>
377                 </list>
378                 <list name="alias" type="char">
379                         <value>4</value>
380                 </list>
381         </struct>
382
383         <struct name="CountedString16">
384                 <field name="length" type="CARD16" />
385                 <list name="string" type="char">
386                         <fieldref>length</fieldref>
387                 </list>
388                 <list type="void" name="alignment_pad">
389                         <op op="-">
390                                 <op op="&amp;">
391                                         <op op="+">
392                                                 <fieldref>length</fieldref>
393                                                 <value>5</value>
394                                         </op>
395                                         <unop op="~">
396                                                 <value>3</value>
397                                         </unop>
398                                 </op>
399                                 <op op="+">
400                                         <fieldref>length</fieldref>
401                                         <value>2</value>
402                                 </op>
403                         </op>
404                 </list>
405         </struct>
406
407         <struct name="KTMapEntry">
408                 <field name="active" type="BOOL" />
409                 <field name="mods_mask" type="CARD8" mask="ModMask" />
410                 <field name="level" type="CARD8" />
411                 <field name="mods_mods" type="CARD8" mask="ModMask" />
412                 <field name="mods_vmods" type="CARD16" mask="VMod" />
413                 <pad bytes="2" />
414         </struct>
415
416         <struct name="KeyType">
417                 <field name="mods_mask" type="CARD8" mask="ModMask" />
418                 <field name="mods_mods" type="CARD8" mask="ModMask" />
419                 <field name="mods_vmods" type="CARD16" mask="VMod" />
420                 <field name="numLevels" type="CARD8" />
421                 <field name="nMapEntries" type="CARD8" />
422                 <field name="hasPreserve" type="BOOL" />
423                 <pad bytes="1" />
424                 <list name="map" type="KTMapEntry">
425                         <fieldref>nMapEntries</fieldref>
426                 </list>
427                 <list name="preserve" type="ModDef">
428                     <op op="*">
429                         <fieldref>hasPreserve</fieldref>
430                         <fieldref>nMapEntries</fieldref>
431                     </op>
432                 </list>
433         </struct>
434
435         <struct name="KeySymMap">
436                 <list name="kt_index" type="CARD8">
437                         <value>4</value>
438                 </list>
439                 <field name="groupInfo" type="CARD8" />
440                 <field name="width" type="CARD8" />
441                 <field name="nSyms" type="CARD16" />
442                 <list name="syms" type="KEYSYM">
443                         <fieldref>nSyms</fieldref>
444                 </list>
445         </struct>
446
447         <!-- Key Behaviors -->
448
449         <struct name="CommonBehavior">
450                 <field name="type" type="CARD8" />
451                 <field name="data" type="CARD8" />
452         </struct>
453
454         <struct name="DefaultBehavior">
455                 <field name="type" type="CARD8" />
456                 <pad bytes="1" />
457         </struct>
458
459         <typedef oldname="DefaultBehavior" newname="LockBehavior" />
460
461         <struct name="RadioGroupBehavior">
462                 <field name="type" type="CARD8" />
463                 <field name="group" type="CARD8" />
464         </struct>
465
466         <struct name="OverlayBehavior">
467                 <field name="type" type="CARD8" />
468                 <field name="key" type="KEYCODE" />
469         </struct>
470
471         <typedef oldname="LockBehavior" newname="PermamentLockBehavior" />
472         <typedef oldname="RadioGroupBehavior" newname="PermamentRadioGroupBehavior" />
473         <typedef oldname="OverlayBehavior" newname="PermamentOverlayBehavior" />
474
475         <union name="Behavior">
476                 <field name="common" type="CommonBehavior" />
477                 <field name="default" type="DefaultBehavior" />
478                 <field name="lock" type="LockBehavior" />
479                 <field name="radioGroup" type="RadioGroupBehavior" />
480                 <field name="overlay1" type="OverlayBehavior" />
481                 <field name="overlay2" type="OverlayBehavior" />
482                 <field name="permamentLock" type="PermamentLockBehavior" />
483                 <field name="permamentRadioGroup" type="PermamentRadioGroupBehavior" />
484                 <field name="permamentOverlay1" type="PermamentOverlayBehavior" />
485                 <field name="permamentOverlay2" type="PermamentOverlayBehavior" />
486                 <field name="type" type="CARD8" />
487         </union>
488
489         <enum name="BehaviorType">
490                 <item name="Default">             <value>0</value> </item>      <!--0x00-->
491                 <item name="Lock">                <value>1</value> </item>      <!--0x01-->
492                 <item name="RadioGroup">          <value>2</value> </item>      <!--0x02-->
493                 <item name="Overlay1">            <value>3</value> </item>      <!--0x03-->
494                 <item name="Overlay2">            <value>4</value> </item>      <!--0x04-->
495                 <item name="PermamentLock">       <value>129</value> </item>    <!--0x81-->
496                 <item name="PermamentRadioGroup"> <value>130</value> </item>    <!--0x82-->
497                 <item name="PermamentOverlay1">   <value>131</value> </item>    <!--0x83-->
498                 <item name="PermamentOverlay2">   <value>132</value> </item>    <!--0x84-->
499         </enum>
500
501         <struct name="SetBehavior">
502                 <field name="keycode" type="KEYCODE" />
503                 <field name="behavior" type="Behavior" />
504                 <pad bytes="1" />
505         </struct>
506
507         <struct name="SetExplicit">
508                 <field name="keycode" type="KEYCODE" />
509                 <field name="explicit" type="CARD8" mask="Explicit" />
510         </struct>
511
512         <struct name="KeyModMap">
513                 <field name="keycode" type="KEYCODE" />
514                 <field name="mods" type="CARD8" mask="ModMask" />
515         </struct>
516
517         <struct name="KeyVModMap">
518                 <field name="keycode" type="KEYCODE" />
519                 <pad bytes="1" />
520                 <field name="vmods" type="CARD16" mask="VMod" />
521         </struct>
522
523         <struct name="KTSetMapEntry">
524                 <field name="level" type="CARD8" />
525                 <field name="realMods" type="CARD8" mask="ModMask" />
526                 <field name="virtualMods" type="CARD16" mask="VMod" />
527         </struct>
528
529         <struct name="SetKeyType">
530                 <field name="mask" type="CARD8" mask="ModMask" />
531                 <field name="realMods" type="CARD8" mask="ModMask" />
532                 <field name="virtualMods" type="CARD16" mask="VMod" />
533                 <field name="numLevels" type="CARD8" />
534                 <field name="nMapEntries" type="CARD8" />
535                 <field name="preserve" type="BOOL" />
536                 <pad bytes="1" />
537                 <list name="entries" type="KTSetMapEntry">
538                         <fieldref>nMapEntries</fieldref>
539                 </list>
540                 <list name="preserve_entries" type="KTSetMapEntry">
541                     <op op = "*">
542                         <fieldref>preserve</fieldref>
543                         <fieldref>nMapEntries</fieldref>
544                     </op>
545                 </list>
546         </struct>
547
548         <typedef oldname="char" newname="STRING8" />
549
550         <!-- XXX: Property is broken
551         <struct name="Property">
552                 <field name="nameLength" type="CARD16" />
553                 <list name="name" type="STRING8">
554                         <fieldref>nameLength</fieldref>
555                 </list>
556                 <field name="valueLength" type="CARD16" />
557                 <list name="value" type="STRING8">
558                         <fieldref>valueLength</fieldref>
559                 </list>
560         </struct>
561         -->
562         <!-- XXX: This would be the correct Property structure as per spec.,
563                   but it's broken atm. too. Add it anyway here, so we don't
564                   loose that information.
565         <struct name="Property">
566                 <field name="name" type="CountedString16" />
567                 <field name="value" type="CountedString16" />
568         </struct>
569         -->
570
571         <struct name="Outline">
572                 <field name="nPoints" type="CARD8" />
573                 <field name="cornerRadius" type="CARD8" />
574                 <pad bytes="2" />
575                 <list name="points" type="POINT">
576                         <fieldref>nPoints</fieldref>
577                 </list>
578         </struct>
579
580         <struct name="Shape">
581                 <field name="name" type="ATOM" />
582                 <field name="nOutlines" type="CARD8" />
583                 <field name="primaryNdx" type="CARD8" />
584                 <field name="approxNdx" type="CARD8" />
585                 <pad bytes="1" />
586                 <list name="outlines" type="Outline">
587                         <fieldref>nOutlines</fieldref>
588                 </list>
589         </struct>
590
591         <struct name="Key">
592                 <list name="name" type="STRING8">
593                         <value>4</value>
594                 </list>
595                 <field name="gap" type="INT16" />
596                 <field name="shapeNdx" type="CARD8" />
597                 <field name="colorNdx" type="CARD8" />
598         </struct>
599
600         <struct name="OverlayKey">
601                 <list name="over" type="STRING8">
602                         <value>4</value>
603                 </list>
604                 <list name="under" type="STRING8">
605                         <value>4</value>
606                 </list>
607         </struct>
608
609         <struct name="OverlayRow">
610                 <field name="rowUnder" type="CARD8" />
611                 <field name="nKeys" type="CARD8" />
612                 <pad bytes="2" />
613                 <list name="keys" type="OverlayKey">
614                         <fieldref>nKeys</fieldref>
615                 </list>
616         </struct>
617
618         <struct name="Overlay">
619                 <field name="name" type="ATOM" />
620                 <field name="nRows" type="CARD8" />
621                 <pad bytes="3" />
622                 <list name="rows" type="OverlayRow">
623                         <fieldref>nRows</fieldref>
624                 </list>
625         </struct>
626
627         <struct name="Row">
628                 <field name="top" type="INT16" />
629                 <field name="left" type="INT16" />
630                 <field name="nKeys" type="CARD8" />
631                 <field name="vertical" type="BOOL" />
632                 <pad bytes="2" />
633                 <list name="keys" type="Key">
634                         <fieldref>nKeys</fieldref>
635                 </list>
636         </struct>
637
638         <enum name="DoodadType">
639                 <item name="Outline">   <value>1</value> </item>
640                 <item name="Solid">     <value>2</value> </item>
641                 <item name="Text">      <value>3</value> </item>
642                 <item name="Indicator"> <value>4</value> </item>
643                 <item name="Logo">      <value>5</value> </item>
644         </enum>
645
646         <!-- XXX: doodads are broken
647         <struct name="CommonDoodad">
648                 <field name="name" type="ATOM" />
649                 <field name="type" type="CARD8" enum="DoodadType" />
650                 <field name="priority" type="CARD8" />
651                 <field name="top" type="INT16" />
652                 <field name="left" type="INT16" />
653                 <field name="angle" type="INT16" />
654                 <pad bytes="8" />
655         </struct>
656
657         <struct name="ShapeDoodad">
658                 <field name="name" type="ATOM" />
659                 <field name="type" type="CARD8" enum="DoodadType" />
660                 <field name="priority" type="CARD8" />
661                 <field name="top" type="INT16" />
662                 <field name="left" type="INT16" />
663                 <field name="angle" type="INT16" />
664                 <field name="colorNdx" type="CARD8" />
665                 <field name="shapeNdx" type="CARD8" />
666                 <pad bytes="6" />
667         </struct>
668
669         <struct name="TextDoodad">
670                 <field name="name" type="ATOM" />
671                 <field name="type" type="CARD8" enum="DoodadType" />
672                 <field name="priority" type="CARD8" />
673                 <field name="top" type="INT16" />
674                 <field name="left" type="INT16" />
675                 <field name="angle" type="INT16" />
676                 <field name="width" type="CARD16" />
677                 <field name="height" type="CARD16" />
678                 <field name="colorNdx" type="CARD8" />
679                 <pad bytes="3" />
680                 <field name="text" type="CountedString16" />
681                 <field name="font" type="CountedString16" />
682         </struct>
683
684         <struct name="IndicatorDoodad">
685                 <field name="name" type="ATOM" />
686                 <field name="type" type="CARD8" enum="DoodadType" />
687                 <field name="priority" type="CARD8" />
688                 <field name="top" type="INT16" />
689                 <field name="left" type="INT16" />
690                 <field name="angle" type="INT16" />
691                 <field name="shapeNdx" type="CARD8" />
692                 <field name="onColorNdx" type="CARD8" />
693                 <field name="offColorNdx" type="CARD8" />
694                 <pad bytes="5" />
695         </struct>
696
697         <struct name="LogoDoodad">
698                 <field name="name" type="ATOM" />
699                 <field name="type" type="CARD8" enum="DoodadType" />
700                 <field name="priority" type="CARD8" />
701                 <field name="top" type="INT16" />
702                 <field name="left" type="INT16" />
703                 <field name="angle" type="INT16" />
704                 <field name="colorNdx" type="CARD8" />
705                 <field name="shapeNdx" type="CARD8" />
706                 <pad bytes="6" />
707                 <field name="logoName" type="CountedString16" />
708         </struct>
709
710         <union name="Doodad">
711                 <field name="common" type="CommonDoodad" />
712                 <field name="shape" type="ShapeDoodad" />
713                 <field name="text" type="TextDoodad" />
714                 <field name="indicator" type="IndicatorDoodad" />
715                 <field name="logo" type="LogoDoodad" />
716         </union>
717
718         <struct name="Section">
719                 <field name="name" type="ATOM" />
720                 <field name="top" type="INT16" />
721                 <field name="left" type="INT16" />
722                 <field name="width" type="CARD16" />
723                 <field name="height" type="CARD16" />
724                 <field name="angle" type="INT16" />
725                 <field name="priority" type="CARD8" />
726                 <field name="nRows" type="CARD8" />
727                 <field name="nDoodads" type="CARD8" />
728                 <field name="nOverlays" type="CARD8" />
729                 <pad bytes="2" />
730                 <list name="rows" type="Row">
731                         <fieldref>nRows</fieldref>
732                 </list>
733                 <list name="doodads" type="Doodad">
734                         <fieldref>nDoodads</fieldref>
735                 </list>
736                 <list name="overlays" type="Overlay">
737                         <fieldref>nOverlays</fieldref>
738                 </list>
739         </struct>
740         -->
741
742         <struct name="Listing">
743                 <field name="flags" type="CARD16" />
744                 <field name="length" type="CARD16" />
745                 <list name="string" type="STRING8">
746                         <fieldref>length</fieldref>
747                 </list>
748         </struct>
749
750         <struct name="DeviceLedInfo">
751                 <field name="ledClass" type="LedClassSpec" enum="LedClass" />
752                 <field name="ledID" type="IDSpec" altenum="ID" />
753                 <field name="namesPresent" type="CARD32" />
754                 <field name="mapsPresent" type="CARD32" />
755                 <field name="physIndicators" type="CARD32" />
756                 <field name="state" type="CARD32" />
757                 <list name="names" type="ATOM">
758                         <popcount>
759                                 <fieldref>namesPresent</fieldref>
760                         </popcount>
761                 </list>
762                 <list name="maps" type="IndicatorMap">
763                         <popcount>
764                                 <fieldref>mapsPresent</fieldref>
765                         </popcount>
766                 </list>
767         </struct>
768
769         <!-- Errors -->
770
771         <enum name="Error">
772                 <item name="BadDevice"> <value>255</value> </item>      <!--0xff-->
773                 <item name="BadClass">  <value>254</value> </item>      <!--0xfe-->
774                 <item name="BadId">     <value>253</value> </item>      <!--0xfd-->
775         </enum>
776
777         <error name="Keyboard" number="0">
778                 <field name="value" type="CARD32" />
779                 <field name="minorOpcode" type="CARD16" />
780                 <field name="majorOpcode" type="CARD8" />
781                 <pad bytes="21" />
782         </error>
783
784         <!-- Key Actions -->
785
786         <enum name="SA">
787                 <item name="ClearLocks">    <bit>0</bit> </item>
788                 <item name="LatchToLock">   <bit>1</bit> </item>
789                 <item name="UseModMapMods"> <bit>2</bit> </item>
790                 <item name="GroupAbsolute"> <bit>2</bit> </item>
791         </enum>
792
793         <enum name="SAType">
794                 <item name="NoAction">       <value>0</value> </item>
795                 <item name="SetMods">        <value>1</value> </item>
796                 <item name="LatchMods">      <value>2</value> </item>
797                 <item name="LockMods">       <value>3</value> </item>
798                 <item name="SetGroup">       <value>4</value> </item>
799                 <item name="LatchGroup">     <value>5</value> </item>
800                 <item name="LockGroup">      <value>6</value> </item>
801                 <item name="MovePtr">        <value>7</value> </item>
802                 <item name="PtrBtn">         <value>8</value> </item>
803                 <item name="LockPtrBtn">     <value>9</value> </item>
804                 <item name="SetPtrDflt">     <value>10</value> </item>
805                 <item name="ISOLock">        <value>11</value> </item>
806                 <item name="Terminate">      <value>12</value> </item>
807                 <item name="SwitchScreen">   <value>13</value> </item>
808                 <item name="SetControls">    <value>14</value> </item>
809                 <item name="LockControls">   <value>15</value> </item>
810                 <item name="ActionMessage">  <value>16</value> </item>
811                 <item name="RedirectKey">    <value>17</value> </item>
812                 <item name="DeviceBtn">      <value>18</value> </item>
813                 <item name="LockDeviceBtn">  <value>19</value> </item>
814                 <item name="DeviceValuator"> <value>20</value> </item>
815         </enum>
816
817         <struct name="SANoAction">
818                 <field name="type" type="CARD8" enum="SAType" />
819                 <pad bytes="7" />
820         </struct>
821
822         <struct name="SASetMods">
823                 <field name="type" type="CARD8" enum="SAType" />
824                 <field name="flags" type="CARD8" mask="SA" />
825                 <field name="mask" type="CARD8" mask="ModMask" />
826                 <field name="realMods" type="CARD8" mask="ModMask" />
827                 <field name="vmodsHigh" type="CARD8" mask="VModsHigh" />
828                 <field name="vmodsLow" type="CARD8" mask="VModsLow" />
829                 <pad bytes="2" />
830         </struct>
831
832         <typedef oldname="SASetMods" newname="SALatchMods" />
833
834         <typedef oldname="SASetMods" newname="SALockMods" />
835
836         <struct name="SASetGroup">
837                 <field name="type" type="CARD8" enum="SAType" />
838                 <field name="flags" type="CARD8" mask="SA" />
839                 <field name="group" type="INT8" />
840                 <pad bytes="5" />
841         </struct>
842
843         <typedef oldname="SASetGroup" newname="SALatchGroup" />
844
845         <typedef oldname="SASetGroup" newname="SALockGroup" />
846
847         <enum name="SAMovePtrFlag">
848                 <item name="NoAcceleration"> <bit>0</bit> </item>
849                 <item name="MoveAbsoluteX">  <bit>1</bit> </item>
850                 <item name="MoveAbsoluteY">  <bit>2</bit> </item>
851         </enum>
852
853         <struct name="SAMovePtr">
854                 <field name="type" type="CARD8" enum="SAType" />
855                 <field name="flags" type="CARD8" mask="SAMovePtrFlag" />
856                 <field name="xHigh" type="INT8" />
857                 <field name="xLow" type="CARD8" />
858                 <field name="yHigh" type="INT8" />
859                 <field name="yLow" type="CARD8" />
860                 <pad bytes="2" />
861         </struct>
862
863         <struct name="SAPtrBtn">
864                 <field name="type" type="CARD8" enum="SAType" />
865                 <field name="flags" type="CARD8" />
866                 <field name="count" type="CARD8" />
867                 <field name="button" type="CARD8" />
868                 <pad bytes="4" />
869         </struct>
870
871         <struct name="SALockPtrBtn">
872                 <field name="type" type="CARD8" enum="SAType" />
873                 <field name="flags" type="CARD8" />
874                 <pad bytes="1" />
875                 <field name="button" type="CARD8" />
876                 <pad bytes="4" />
877         </struct>
878
879         <enum name="SASetPtrDfltFlag">
880                 <!-- The spec says 0x02 but Xlib uses 0x04. -->
881                 <item name="DfltBtnAbsolute">  <bit>2</bit> </item>
882                 <item name="AffectDfltButton"> <bit>0</bit> </item>
883         </enum>
884
885         <struct name="SASetPtrDflt">
886                 <field name="type" type="CARD8" enum="SAType" />
887                 <field name="flags" type="CARD8" mask="SASetPtrDfltFlag" />
888                 <field name="affect" type="CARD8" mask="SASetPtrDfltFlag" />
889                 <field name="value" type="INT8" />
890                 <pad bytes="4" />
891         </struct>
892
893         <enum name="SAIsoLockFlag">
894                 <item name="NoLock">         <bit>0</bit> </item>
895                 <item name="NoUnlock">       <bit>1</bit> </item>
896                 <item name="UseModMapMods">  <bit>2</bit> </item>
897                 <item name="GroupAbsolute">  <bit>2</bit> </item>
898                 <item name="ISODfltIsGroup"> <bit>3</bit> </item>
899         </enum>
900
901         <enum name="SAIsoLockNoAffect">
902                 <item name="Ctrls"> <bit>3</bit> </item>
903                 <item name="Ptr">   <bit>4</bit> </item>
904                 <item name="Group"> <bit>5</bit> </item>
905                 <item name="Mods">  <bit>6</bit> </item>
906         </enum>
907
908         <struct name="SAIsoLock">
909                 <field name="type" type="CARD8" enum="SAType" />
910                 <field name="flags" type="CARD8" mask="SAIsoLockFlag" />
911                 <field name="mask" type="CARD8" mask="ModMask" />
912                 <field name="realMods" type="CARD8" mask="ModMask" />
913                 <field name="group" type="INT8" />
914                 <field name="affect" type="CARD8" mask="SAIsoLockNoAffect" />
915                 <field name="vmodsHigh" type="CARD8" mask="VModsHigh" />
916                 <field name="vmodsLow" type="CARD8" mask="VModsLow" />
917         </struct>
918
919         <struct name="SATerminate">
920                 <field name="type" type="CARD8" enum="SAType" />
921                 <pad bytes="7" />
922         </struct>
923
924         <enum name="SwitchScreenFlag">
925                 <item name="Application"> <bit>0</bit> </item>
926                 <item name="Absolute" >   <bit>2</bit> </item>
927         </enum>
928
929         <struct name="SASwitchScreen">
930                 <field name="type" type="CARD8" enum="SAType" />
931                 <field name="flags" type="CARD8" />
932                 <field name="newScreen" type="INT8" />
933                 <pad bytes="5" />
934         </struct>
935
936         <enum name="BoolCtrlsHigh">
937                 <item name="AccessXFeedback"> <bit>0</bit> </item>
938                 <item name="AudibleBell">     <bit>1</bit> </item>
939                 <item name="Overlay1">        <bit>2</bit> </item>
940                 <item name="Overlay2">        <bit>3</bit> </item>
941                 <item name="IgnoreGroupLock"> <bit>4</bit> </item>
942         </enum>
943
944         <enum name="BoolCtrlsLow">
945                 <item name="RepeatKeys">     <bit>0</bit> </item>
946                 <item name="SlowKeys">       <bit>1</bit> </item>
947                 <item name="BounceKeys">     <bit>2</bit> </item>
948                 <item name="StickyKeys">     <bit>3</bit> </item>
949                 <item name="MouseKeys">      <bit>4</bit> </item>
950                 <item name="MouseKeysAccel"> <bit>5</bit> </item>
951                 <item name="AccessXKeys">    <bit>6</bit> </item>
952                 <item name="AccessXTimeout"> <bit>7</bit> </item>
953         </enum>
954
955         <struct name="SASetControls">
956                 <field name="type" type="CARD8" enum="SAType" />
957                 <pad bytes="3" />
958                 <field name="boolCtrlsHigh" type="CARD8" mask="BoolCtrlsHigh" />
959                 <field name="boolCtrlsLow"  type="CARD8" mask="BoolCtrlsLow" />
960                 <pad bytes="2" />
961         </struct>
962
963         <typedef oldname="SASetControls" newname="SALockControls" />
964
965         <enum name="ActionMessageFlag">
966                 <item name="OnPress">     <bit>0</bit> </item>
967                 <item name="OnRelease">   <bit>1</bit> </item>
968                 <item name="GenKeyEvent"> <bit>2</bit> </item>
969         </enum>
970
971         <struct name="SAActionMessage">
972                 <field name="type" type="CARD8" enum="SAType" />
973                 <field name="flags" type="CARD8" mask="ActionMessageFlag" />
974                 <list name="message" type="CARD8">
975                         <value>6</value>
976                 </list>
977         </struct>
978
979         <struct name="SARedirectKey">
980                 <field name="type" type="CARD8" enum="SAType" />
981                 <field name="newkey" type="KEYCODE" />
982                 <field name="mask" type="CARD8" mask="ModMask" />
983                 <field name="realModifiers" type="CARD8" mask="ModMask" />
984                 <field name="vmodsMaskHigh" type="CARD8" mask="VModsHigh"/>
985                 <field name="vmodsMaskLow" type="CARD8" mask="VModsLow"/>
986                 <field name="vmodsHigh" type="CARD8" mask="VModsHigh"/>
987                 <field name="vmodsLow" type="CARD8" mask="VModsLow"/>
988         </struct>
989
990         <struct name="SADeviceBtn">
991                 <field name="type" type="CARD8" enum="SAType" />
992                 <field name="flags" type="CARD8" />
993                 <field name="count" type="CARD8" />
994                 <field name="button" type="CARD8" />
995                 <field name="device" type="CARD8" />
996                 <pad bytes="3" />
997         </struct>
998
999         <enum name="LockDeviceFlags">
1000                 <item name="NoLock">   <bit>0</bit> </item>
1001                 <item name="NoUnlock"> <bit>1</bit> </item>
1002         </enum>
1003
1004         <struct name="SALockDeviceBtn">
1005                 <field name="type" type="CARD8" enum="SAType" />
1006                 <field name="flags" type="CARD8" mask="LockDeviceFlags" />
1007                 <pad bytes="1" />
1008                 <field name="button" type="CARD8" />
1009                 <field name="device" type="CARD8" />
1010                 <pad bytes="3" />
1011         </struct>
1012
1013         <enum name="SAValWhat">
1014                 <item name="IgnoreVal">      <value>0</value> </item>
1015                 <item name="SetValMin">      <value>1</value> </item>
1016                 <item name="SetValCenter">   <value>2</value> </item>
1017                 <item name="SetValMax">      <value>3</value> </item>
1018                 <item name="SetValRelative"> <value>4</value> </item>
1019                 <item name="SetValAbsolute"> <value>5</value> </item>
1020         </enum>
1021
1022         <struct name="SADeviceValuator">
1023                 <field name="type" type="CARD8" enum="SAType" />
1024                 <field name="device" type="CARD8" />
1025                 <field name="val1what" type="CARD8" enum="SAValWhat" />
1026                 <field name="val1index" type="CARD8" />
1027                 <field name="val1value" type="CARD8" />
1028                 <field name="val2what" type="CARD8" enum="SAValWhat" />
1029                 <field name="val2index" type="CARD8" />
1030                 <field name="val2value" type="CARD8" />
1031         </struct>
1032
1033         <struct name="SIAction">
1034                 <field name="type" type="CARD8" enum="SAType" />
1035                 <list name="data" type="CARD8">
1036                         <value>7</value>
1037                 </list>
1038         </struct>
1039
1040         <struct name="SymInterpret">
1041                 <field name="sym" type="KEYSYM" />
1042                 <field name="mods" type="CARD8" mask="ModMask" />
1043                 <!-- "match" may also have XkbSI_LevelOneOnly (0x80) or'd into it -->
1044                 <field name="match" type="CARD8" altenum="SymInterpretMatch" />
1045                 <field name="virtualMod" type="CARD8" mask="VModsLow" />
1046                 <field name="flags" type="CARD8" />
1047                 <field name="action" type="SIAction" />
1048         </struct>
1049
1050         <union name="Action">
1051                 <field name="noaction" type="SANoAction" />
1052                 <field name="setmods" type="SASetMods" />
1053                 <field name="latchmods" type="SALatchMods" />
1054                 <field name="lockmods" type="SALockMods" />
1055                 <field name="setgroup" type="SASetGroup" />
1056                 <field name="latchgroup" type="SALatchGroup" />
1057                 <field name="lockgroup" type="SALockGroup" />
1058                 <field name="moveptr" type="SAMovePtr" />
1059                 <field name="ptrbtn" type="SAPtrBtn" />
1060                 <field name="lockptrbtn" type="SALockPtrBtn" />
1061                 <field name="setptrdflt" type="SASetPtrDflt" />
1062                 <field name="isolock" type="SAIsoLock" />
1063                 <field name="terminate" type="SATerminate" />
1064                 <field name="switchscreen" type="SASwitchScreen" />
1065                 <field name="setcontrols" type="SASetControls" />
1066                 <field name="lockcontrols" type="SALockControls" />
1067                 <field name="message" type="SAActionMessage" />
1068                 <field name="redirect" type="SARedirectKey" />
1069                 <field name="devbtn" type="SADeviceBtn" />
1070                 <field name="lockdevbtn" type="SALockDeviceBtn" />
1071                 <field name="devval" type="SADeviceValuator" />
1072                 <field name="type" type="CARD8" enum="SAType" />
1073         </union>
1074
1075         <!-- Requests -->
1076
1077         <request name="UseExtension" opcode="0">
1078                 <field name="wantedMajor" type="CARD16" />
1079                 <field name="wantedMinor" type="CARD16" />
1080                 <reply>
1081                         <field name="supported" type="BOOL" />
1082                         <field name="serverMajor" type="CARD16" />
1083                         <field name="serverMinor" type="CARD16" />
1084                         <pad bytes="20" />
1085                 </reply>
1086         </request>
1087
1088         <request name="SelectEvents" opcode="1">
1089                 <field name="deviceSpec" type="DeviceSpec" />
1090                 <field name="affectWhich" type="CARD16" mask="EventType" />
1091                 <field name="clear" type="CARD16" mask="EventType" />
1092                 <field name="selectAll" type="CARD16" mask="EventType" />
1093                 <field name="affectMap" type="CARD16" mask="MapPart" />
1094                 <field name="map" type="CARD16" mask="MapPart" />
1095                 <switch name="details">
1096                         <op op="&amp;">
1097                                 <fieldref>affectWhich</fieldref>
1098                                 <op op="&amp;">
1099                                         <unop op="~"><fieldref>clear</fieldref></unop>
1100                                         <unop op="~"><fieldref>selectAll</fieldref></unop>
1101                                 </op>
1102                         </op>
1103                         <bitcase>
1104                                 <enumref ref="EventType">NewKeyboardNotify</enumref>
1105                                 <field name="affectNewKeyboard" type="CARD16" mask="NKNDetail" />
1106                                 <field name="newKeyboardDetails" type="CARD16" mask="NKNDetail" />
1107                         </bitcase>
1108                         <bitcase>
1109                                 <enumref ref="EventType">StateNotify</enumref>
1110                                 <field name="affectState" type="CARD16" mask="StatePart" />
1111                                 <field name="stateDetails" type="CARD16" mask="StatePart" />
1112                         </bitcase>
1113                         <bitcase>
1114                                 <enumref ref="EventType">ControlsNotify</enumref>
1115                                 <field name="affectCtrls" type="CARD32" mask="Control" />
1116                                 <field name="ctrlDetails" type="CARD32" mask="Control" />
1117                         </bitcase>
1118                         <bitcase>
1119                                 <enumref ref="EventType">IndicatorStateNotify</enumref>
1120                                 <field name="affectIndicatorState" type="CARD32" />
1121                                 <field name="indicatorStateDetails" type="CARD32" />
1122                         </bitcase>
1123                         <bitcase>
1124                                 <enumref ref="EventType">IndicatorMapNotify</enumref>
1125                                 <field name="affectIndicatorMap" type="CARD32" />
1126                                 <field name="indicatorMapDetails" type="CARD32" />
1127                         </bitcase>
1128                         <bitcase>
1129                                 <enumref ref="EventType">NamesNotify</enumref>
1130                                 <field name="affectNames" type="CARD16" mask="NameDetail" />
1131                                 <field name="namesDetails" type="CARD16" mask="NameDetail" />
1132                         </bitcase>
1133                         <bitcase>
1134                                 <enumref ref="EventType">CompatMapNotify</enumref>
1135                                 <field name="affectCompat" type="CARD8" mask="CMDetail" />
1136                                 <field name="compatDetails" type="CARD8" mask="CMDetail" />
1137                         </bitcase>
1138                         <bitcase>
1139                                 <enumref ref="EventType">BellNotify</enumref>
1140                                 <field name="affectBell" type="CARD8" />
1141                                 <field name="bellDetails" type="CARD8" />
1142                         </bitcase>
1143                         <bitcase>
1144                                 <enumref ref="EventType">ActionMessage</enumref>
1145                                 <field name="affectMsgDetails" type="CARD8" />
1146                                 <field name="msgDetails" type="CARD8" />
1147                         </bitcase>
1148                         <bitcase>
1149                                 <enumref ref="EventType">AccessXNotify</enumref>
1150                                 <field name="affectAccessX" type="CARD16" mask="AXNDetail" />
1151                                 <field name="accessXDetails" type="CARD16" mask="AXNDetail" />
1152                         </bitcase>
1153                         <bitcase>
1154                                 <enumref ref="EventType">ExtensionDeviceNotify</enumref>
1155                                 <field name="affectExtDev" type="CARD16" mask="XIFeature" />
1156                                 <field name="extdevDetails" type="CARD16" mask="XIFeature" />
1157                         </bitcase>
1158                 </switch>
1159         </request>
1160
1161         <request name="Bell" opcode="3">
1162                 <field name="deviceSpec" type="DeviceSpec" />
1163                 <field name="bellClass" type="BellClassSpec" />
1164                 <field name="bellID" type="IDSpec" />
1165                 <field name="percent" type="INT8" />
1166                 <field name="forceSound" type="BOOL" />
1167                 <field name="eventOnly" type="BOOL" />
1168                 <pad bytes="1" />
1169                 <field name="pitch" type="INT16" />
1170                 <field name="duration" type="INT16" />
1171                 <pad bytes="2" />
1172                 <field name="name" type="ATOM" />
1173                 <field name="window" type="WINDOW" />
1174         </request>
1175
1176         <request name="GetState" opcode="4">
1177                 <field name="deviceSpec" type="DeviceSpec" />
1178                 <pad bytes="2" />
1179                 <reply>
1180                         <field name="deviceID" type="CARD8" />
1181                         <field name="mods" type="CARD8" mask="ModMask" />
1182                         <field name="baseMods" type="CARD8" mask="ModMask" />
1183                         <field name="latchedMods" type="CARD8" mask="ModMask" />
1184                         <field name="lockedMods" type="CARD8" mask="ModMask" />
1185                         <field name="group" type="CARD8" enum="Group" />
1186                         <field name="lockedGroup" type="CARD8" enum="Group" />
1187                         <field name="baseGroup" type="INT16" />
1188                         <field name="latchedGroup" type="INT16" />
1189                         <field name="compatState" type="CARD8" mask="ModMask" />
1190                         <field name="grabMods" type="CARD8" mask="ModMask" />
1191                         <field name="compatGrabMods" type="CARD8" mask="ModMask" />
1192                         <field name="lookupMods" type="CARD8" mask="ModMask" />
1193                         <field name="compatLookupMods" type="CARD8" mask="ModMask" />
1194                         <pad bytes="1" />
1195                         <field name="ptrBtnState" type="CARD16" mask="KeyButMask" />
1196                         <pad bytes="6" />
1197                 </reply>
1198         </request>
1199
1200         <request name="LatchLockState" opcode="5">
1201                 <field name="deviceSpec" type="DeviceSpec" />
1202                 <field name="affectModLocks" type="CARD8" mask="ModMask" />
1203                 <field name="modLocks" type="CARD8" mask="ModMask" />
1204                 <field name="lockGroup" type="BOOL" />
1205                 <field name="groupLock" type="CARD8" enum="Group" />
1206                 <field name="affectModLatches" type="CARD8" mask="ModMask" />
1207                 <pad bytes="1" /> <!-- This pad is a workaround to prevent an API break,
1208                                        which the following field (correct fix) would cause.
1209                 <field name="modLatches" type="CARD8" mask="ModMask" />
1210                 -->
1211                 <pad bytes="1" />
1212                 <field name="latchGroup" type="BOOL" />
1213                 <field name="groupLatch" type="CARD16" />
1214         </request>
1215
1216         <request name="GetControls" opcode="6">
1217                 <field name="deviceSpec" type="DeviceSpec" />
1218                 <pad bytes="2" />
1219                 <reply>
1220                         <field name="deviceID" type="CARD8" />
1221                         <field name="mouseKeysDfltBtn" type="CARD8" />
1222                         <field name="numGroups" type="CARD8" />
1223                         <field name="groupsWrap" type="CARD8" />
1224                         <field name="internalModsMask" type="CARD8" mask="ModMask" />
1225                         <field name="ignoreLockModsMask" type="CARD8" mask="ModMask" />
1226                         <field name="internalModsRealMods" type="CARD8" mask="ModMask" />
1227                         <field name="ignoreLockModsRealMods" type="CARD8" mask="ModMask" />
1228                         <pad bytes="1" />
1229                         <field name="internalModsVmods" type="CARD16" mask="VMod" />
1230                         <field name="ignoreLockModsVmods" type="CARD16" mask="VMod" />
1231                         <field name="repeatDelay" type="CARD16" />
1232                         <field name="repeatInterval" type="CARD16" />
1233                         <field name="slowKeysDelay" type="CARD16" />
1234                         <field name="debounceDelay" type="CARD16" />
1235                         <field name="mouseKeysDelay" type="CARD16" />
1236                         <field name="mouseKeysInterval" type="CARD16" />
1237                         <field name="mouseKeysTimeToMax" type="CARD16" />
1238                         <field name="mouseKeysMaxSpeed" type="CARD16" />
1239                         <field name="mouseKeysCurve" type="INT16" />
1240                         <field name="accessXOption" type="CARD16" mask="AXOption" />
1241                         <field name="accessXTimeout" type="CARD16" />
1242                         <field name="accessXTimeoutOptionsMask" type="CARD16" mask="AXOption" />
1243                         <field name="accessXTimeoutOptionsValues" type="CARD16" mask="AXOption" />
1244                         <pad bytes="2" />
1245                         <field name="accessXTimeoutMask" type="CARD32" mask="BoolCtrl" />
1246                         <field name="accessXTimeoutValues" type="CARD32" mask="BoolCtrl" />
1247                         <field name="enabledControls" type="CARD32" mask="BoolCtrl" />
1248                         <list name="perKeyRepeat" type="CARD8">
1249                                 <value>32</value>
1250                         </list>
1251                 </reply>
1252         </request>
1253
1254         <request name="SetControls" opcode="7">
1255                 <field name="deviceSpec" type="DeviceSpec" />
1256                 <field name="affectInternalRealMods" type="CARD8" mask="ModMask" />
1257                 <field name="internalRealMods" type="CARD8" mask="ModMask" />
1258                 <field name="affectIgnoreLockRealMods" type="CARD8" mask="ModMask" />
1259                 <field name="ignoreLockRealMods" type="CARD8" mask="ModMask" />
1260                 <field name="affectInternalVirtualMods" type="CARD16" mask="VMod" />
1261                 <field name="internalVirtualMods" type="CARD16" mask="VMod" />
1262                 <field name="affectIgnoreLockVirtualMods" type="CARD16" mask="VMod" />
1263                 <field name="ignoreLockVirtualMods" type="CARD16" mask="VMod" />
1264                 <field name="mouseKeysDfltBtn" type="CARD8" />
1265                 <field name="groupsWrap" type="CARD8" />
1266                 <field name="accessXOptions" type="CARD16" mask="AXOption" />
1267                 <pad bytes="2" />
1268                 <field name="affectEnabledControls" type="CARD32" mask="BoolCtrl" />
1269                 <field name="enabledControls" type="CARD32" mask="BoolCtrl" />
1270                 <field name="changeControls" type="CARD32" mask="Control" />
1271                 <field name="repeatDelay" type="CARD16" />
1272                 <field name="repeatInterval" type="CARD16" />
1273                 <field name="slowKeysDelay" type="CARD16" />
1274                 <field name="debounceDelay" type="CARD16" />
1275                 <field name="mouseKeysDelay" type="CARD16" />
1276                 <field name="mouseKeysInterval" type="CARD16" />
1277                 <field name="mouseKeysTimeToMax" type="CARD16" />
1278                 <field name="mouseKeysMaxSpeed" type="CARD16" />
1279                 <field name="mouseKeysCurve" type="INT16" />
1280                 <field name="accessXTimeout" type="CARD16" />
1281                 <field name="accessXTimeoutMask" type="CARD32" mask="BoolCtrl" />
1282                 <field name="accessXTimeoutValues" type="CARD32" mask="BoolCtrl" />
1283                 <field name="accessXTimeoutOptionsMask" type="CARD16" mask="AXOption" />
1284                 <field name="accessXTimeoutOptionsValues" type="CARD16" mask="AXOption" />
1285                 <list name="perKeyRepeat" type="CARD8">
1286                         <value>32</value>
1287                 </list>
1288         </request>
1289
1290         <request name="GetMap" opcode="8">
1291                 <field name="deviceSpec" type="DeviceSpec" />
1292                 <field name="full" type="CARD16" mask="MapPart" />
1293                 <field name="partial" type="CARD16" mask="MapPart" />
1294                 <field name="firstType" type="CARD8" />
1295                 <field name="nTypes" type="CARD8" />
1296                 <field name="firstKeySym" type="KEYCODE" />
1297                 <field name="nKeySyms" type="CARD8" />
1298                 <field name="firstKeyAction" type="KEYCODE" />
1299                 <field name="nKeyActions" type="CARD8" />
1300                 <field name="firstKeyBehavior" type="KEYCODE" />
1301                 <field name="nKeyBehaviors" type="CARD8" />
1302                 <field name="virtualMods" type="CARD16" mask="VMod" />
1303                 <field name="firstKeyExplicit" type="KEYCODE" />
1304                 <field name="nKeyExplicit" type="CARD8" />
1305                 <field name="firstModMapKey" type="KEYCODE" />
1306                 <field name="nModMapKeys" type="CARD8" />
1307                 <field name="firstVModMapKey" type="KEYCODE" />
1308                 <field name="nVModMapKeys" type="CARD8" />
1309                 <pad bytes="2" />
1310                 <reply>
1311                         <field name="deviceID" type="CARD8" />
1312                         <pad bytes="2" />
1313                         <field name="minKeyCode" type="KEYCODE" />
1314                         <field name="maxKeyCode" type="KEYCODE" />
1315                         <field name="present" type="CARD16" mask="MapPart" />
1316                         <field name="firstType" type="CARD8" />
1317                         <field name="nTypes" type="CARD8" />
1318                         <field name="totalTypes" type="CARD8" />
1319                         <field name="firstKeySym" type="KEYCODE" />
1320                         <field name="totalSyms" type="CARD16" />
1321                         <field name="nKeySyms" type="CARD8" />
1322                         <field name="firstKeyAction" type="KEYCODE" />
1323                         <field name="totalActions" type="CARD16" />
1324                         <field name="nKeyActions" type="CARD8" />
1325                         <field name="firstKeyBehavior" type="KEYCODE" />
1326                         <field name="nKeyBehaviors" type="CARD8" />
1327                         <field name="totalKeyBehaviors" type="CARD8" />
1328                         <field name="firstKeyExplicit" type="KEYCODE" />
1329                         <field name="nKeyExplicit" type="CARD8" />
1330                         <field name="totalKeyExplicit" type="CARD8" />
1331                         <field name="firstModMapKey" type="KEYCODE" />
1332                         <field name="nModMapKeys" type="CARD8" />
1333                         <field name="totalModMapKeys" type="CARD8" />
1334                         <field name="firstVModMapKey" type="KEYCODE" />
1335                         <field name="nVModMapKeys" type="CARD8" />
1336                         <field name="totalVModMapKeys" type="CARD8" />
1337                         <pad bytes="1" />
1338                         <field name="virtualMods" type="CARD16" mask="VMod" />
1339                         <switch name="map">
1340                                 <fieldref>present</fieldref>
1341                                 <bitcase>
1342                                         <enumref ref="MapPart">KeyTypes</enumref>
1343                                         <list name="types_rtrn" type="KeyType">
1344                                                 <fieldref>nTypes</fieldref>
1345                                         </list>
1346                                 </bitcase>
1347                                 <bitcase>
1348                                         <enumref ref="MapPart">KeySyms</enumref>
1349                                         <list name="syms_rtrn" type="KeySymMap">
1350                                                 <fieldref>nKeySyms</fieldref>
1351                                         </list>
1352                                 </bitcase>
1353                                 <bitcase>
1354                                         <enumref ref="MapPart">KeyActions</enumref>
1355                                         <list name="acts_rtrn_count" type="CARD8">
1356                                                 <fieldref>nKeyActions</fieldref>
1357                                         </list>
1358                                         <pad align="4" />
1359                                         <list name="acts_rtrn_acts" type="Action">
1360                                                 <fieldref>totalActions</fieldref>
1361                                         </list>
1362                                 </bitcase>
1363                                 <bitcase>
1364                                         <enumref ref="MapPart">KeyBehaviors</enumref>
1365                                         <list name="behaviors_rtrn" type="SetBehavior">
1366                                                 <fieldref>totalKeyBehaviors</fieldref>
1367                                         </list>
1368                                 </bitcase>
1369                                 <bitcase>
1370                                         <enumref ref="MapPart">VirtualMods</enumref>
1371                                         <list name="vmods_rtrn" type="CARD8" mask="ModMask">
1372                                                 <popcount><fieldref>virtualMods</fieldref></popcount>
1373                                         </list>
1374                                         <pad align="4" />
1375                                 </bitcase>
1376                                 <bitcase>
1377                                         <enumref ref="MapPart">ExplicitComponents</enumref>
1378                                         <list name="explicit_rtrn" type="SetExplicit">
1379                                                 <fieldref>totalKeyExplicit</fieldref>
1380                                         </list>
1381                                         <pad align="4" />
1382                                 </bitcase>
1383                                 <bitcase>
1384                                         <enumref ref="MapPart">ModifierMap</enumref>
1385                                         <list name="modmap_rtrn" type="KeyModMap">
1386                                                 <fieldref>totalModMapKeys</fieldref>
1387                                         </list>
1388                                         <pad align="4" />
1389                                 </bitcase>
1390                                 <bitcase>
1391                                         <enumref ref="MapPart">VirtualModMap</enumref>
1392                                         <list name="vmodmap_rtrn" type="KeyVModMap">
1393                                                 <fieldref>totalVModMapKeys</fieldref>
1394                                         </list>
1395                                 </bitcase>
1396                         </switch>
1397                 </reply>
1398         </request>
1399
1400         <request name="SetMap" opcode="9">
1401                 <field name="deviceSpec" type="DeviceSpec" />
1402                 <field name="present" type="CARD16" mask="MapPart" />
1403                 <field name="flags" type="CARD16" mask="SetMapFlags" />
1404                 <field name="minKeyCode" type="KEYCODE" />
1405                 <field name="maxKeyCode" type="KEYCODE" />
1406                 <field name="firstType" type="CARD8" />
1407                 <field name="nTypes" type="CARD8" />
1408                 <field name="firstKeySym" type="KEYCODE" />
1409                 <field name="nKeySyms" type="CARD8" />
1410                 <field name="totalSyms" type="CARD16" />
1411                 <field name="firstKeyAction" type="KEYCODE" />
1412                 <field name="nKeyActions" type="CARD8" />
1413                 <field name="totalActions" type="CARD16" />
1414                 <field name="firstKeyBehavior" type="KEYCODE" />
1415                 <field name="nKeyBehaviors" type="CARD8" />
1416                 <field name="totalKeyBehaviors" type="CARD8" />
1417                 <field name="firstKeyExplicit" type="KEYCODE" />
1418                 <field name="nKeyExplicit" type="CARD8" />
1419                 <field name="totalKeyExplicit" type="CARD8" />
1420                 <field name="firstModMapKey" type="KEYCODE" />
1421                 <field name="nModMapKeys" type="CARD8" />
1422                 <field name="totalModMapKeys" type="CARD8" />
1423                 <field name="firstVModMapKey" type="KEYCODE" />
1424                 <field name="nVModMapKeys" type="CARD8" />
1425                 <field name="totalVModMapKeys" type="CARD8" />
1426                 <field name="virtualMods" type="CARD16" mask="VMod" />
1427                 <switch name="values">
1428                         <fieldref>present</fieldref>
1429                         <bitcase>
1430                                 <enumref ref="MapPart">KeyTypes</enumref>
1431                                 <list name="types" type="SetKeyType">
1432                                         <fieldref>nTypes</fieldref>
1433                                 </list>
1434                         </bitcase>
1435                         <bitcase>
1436                                 <enumref ref="MapPart">KeySyms</enumref>
1437                                 <list name="syms" type="KeySymMap">
1438                                         <fieldref>nKeySyms</fieldref>
1439                                 </list>
1440                         </bitcase>
1441                         <bitcase>
1442                                 <enumref ref="MapPart">KeyActions</enumref>
1443                                 <list name="actionsCount" type="CARD8">
1444                                         <fieldref>nKeyActions</fieldref>
1445                                 </list>
1446                                 <list name="actions" type="Action">
1447                                         <fieldref>totalActions</fieldref>
1448                                 </list>
1449                         </bitcase>
1450                         <bitcase>
1451                                 <enumref ref="MapPart">KeyBehaviors</enumref>
1452                                 <list name="behaviors" type="SetBehavior">
1453                                         <fieldref>totalKeyBehaviors</fieldref>
1454                                 </list>
1455                         </bitcase>
1456                         <bitcase>
1457                                 <enumref ref="MapPart">VirtualMods</enumref>
1458                                 <list name="vmods" type="CARD8">
1459                                         <popcount><fieldref>virtualMods</fieldref></popcount>
1460                                 </list>
1461                         </bitcase>
1462                         <bitcase>
1463                                 <enumref ref="MapPart">ExplicitComponents</enumref>
1464                                 <list name="explicit" type="SetExplicit">
1465                                         <fieldref>totalKeyExplicit</fieldref>
1466                                 </list>
1467                         </bitcase>
1468                         <bitcase>
1469                                 <enumref ref="MapPart">ModifierMap</enumref>
1470                                 <list name="modmap" type="KeyModMap">
1471                                         <fieldref>totalModMapKeys</fieldref>
1472                                 </list>
1473                         </bitcase>
1474                         <bitcase>
1475                                 <enumref ref="MapPart">VirtualModMap</enumref>
1476                                 <list name="vmodmap" type="KeyVModMap">
1477                                         <fieldref>totalVModMapKeys</fieldref>
1478                                 </list>
1479                         </bitcase>
1480                 </switch>
1481         </request>
1482
1483         <request name="GetCompatMap" opcode="10">
1484                 <field name="deviceSpec" type="DeviceSpec" />
1485                 <field name="groups" type="CARD8" mask="SetOfGroup" />
1486                 <field name="getAllSI" type="BOOL" />
1487                 <field name="firstSI" type="CARD16" />
1488                 <field name="nSI" type="CARD16" />
1489                 <reply>
1490                         <field name="deviceID" type="CARD8" />
1491                         <field name="groupsRtrn" type="CARD8" mask="SetOfGroup" />
1492                         <pad bytes="1" />
1493                         <field name="firstSIRtrn" type="CARD16" />
1494                         <field name="nSIRtrn" type="CARD16" />
1495                         <field name="nTotalSI" type="CARD16" />
1496                         <pad bytes="16" />
1497                         <list name="si_rtrn" type="SymInterpret">
1498                                 <fieldref>nSIRtrn</fieldref>
1499                         </list>
1500                         <list name="group_rtrn" type="ModDef">
1501                                 <popcount>
1502                                         <fieldref>groupsRtrn</fieldref>
1503                                 </popcount>
1504                         </list>
1505                 </reply>
1506         </request>
1507
1508         <request name="SetCompatMap" opcode="11">
1509                 <field name="deviceSpec" type="DeviceSpec" />
1510                 <pad bytes="1" />
1511                 <field name="recomputeActions" type="BOOL" />
1512                 <field name="truncateSI" type="BOOL" />
1513                 <field name="groups" type="CARD8" mask="SetOfGroup" />
1514                 <field name="firstSI" type="CARD16" />
1515                 <field name="nSI" type="CARD16" />
1516                 <pad bytes="2"/>
1517                 <list name="si" type="SymInterpret">
1518                         <fieldref>nSI</fieldref>
1519                 </list>
1520                 <list name="groupMaps" type="ModDef">
1521                         <popcount>
1522                                 <fieldref>groups</fieldref>
1523                         </popcount>
1524                 </list>
1525         </request>
1526
1527         <request name="GetIndicatorState" opcode="12">
1528                 <field name="deviceSpec" type="DeviceSpec" />
1529                 <pad bytes="2" />
1530                 <reply>
1531                         <field name="deviceID" type="CARD8" />
1532                         <field name="state" type="CARD32" />
1533                         <pad bytes="20" />
1534                 </reply>
1535         </request>
1536
1537         <request name="GetIndicatorMap" opcode="13">
1538                 <field name="deviceSpec" type="DeviceSpec" />
1539                 <pad bytes="2" />
1540                 <field name="which" type="CARD32" />
1541                 <reply>
1542                         <field name="deviceID" type="CARD8" />
1543                         <field name="which" type="CARD32" />
1544                         <field name="realIndicators" type="CARD32" />
1545                         <field name="nIndicators" type="CARD8" />
1546                         <pad bytes="15" />
1547                         <list name="maps" type="IndicatorMap">
1548                                 <popcount><fieldref>which</fieldref></popcount>
1549                         </list>
1550                 </reply>
1551         </request>
1552
1553         <request name="SetIndicatorMap" opcode="14">
1554                 <field name="deviceSpec" type="DeviceSpec" />
1555                 <pad bytes="2" />
1556                 <field name="which" type="CARD32" />
1557                 <list name="maps" type="IndicatorMap">
1558                         <popcount>
1559                                 <fieldref>which</fieldref>
1560                         </popcount>
1561                 </list>
1562         </request>
1563
1564         <request name="GetNamedIndicator" opcode="15">
1565                 <field name="deviceSpec" type="DeviceSpec" />
1566                 <field name="ledClass" type="LedClassSpec" enum="LedClass" />
1567                 <field name="ledID" type="IDSpec" altenum="ID" />
1568                 <pad bytes="2" />
1569                 <field name="indicator" type="ATOM" />
1570                 <reply>
1571                         <field name="deviceID" type="CARD8" />
1572                         <field name="indicator" type="ATOM" />
1573                         <field name="found" type="BOOL" />
1574                         <field name="on" type="BOOL" />
1575                         <field name="realIndicator" type="BOOL" />
1576                         <field name="ndx" type="CARD8" />
1577                         <field name="map_flags" type="CARD8" mask="IMFlag" />
1578                         <field name="map_whichGroups" type="CARD8" mask="IMGroupsWhich" />
1579                         <field name="map_groups" type="CARD8" mask="SetOfGroups" />
1580                         <field name="map_whichMods" type="CARD8" mask="IMModsWhich" />
1581                         <field name="map_mods" type="CARD8" mask="ModMask" />
1582                         <field name="map_realMods" type="CARD8" mask="ModMask" />
1583                         <field name="map_vmod" type="CARD16" mask="VMod" />
1584                         <field name="map_ctrls" type="CARD32" mask="BoolCtrl" />
1585                         <field name="supported" type="BOOL" />
1586                         <pad bytes="3" />
1587                 </reply>
1588         </request>
1589
1590         <request name="SetNamedIndicator" opcode="16" >
1591                 <field name="deviceSpec" type="DeviceSpec" />
1592                 <field name="ledClass" type="LedClassSpec" enum="LedClass" />
1593                 <field name="ledID" type="IDSpec" altenum="ID" />
1594                 <pad bytes="2" />
1595                 <field name="indicator" type="ATOM" />
1596                 <field name="setState" type="BOOL" />
1597                 <field name="on" type="BOOL" />
1598                 <field name="setMap" type="BOOL" />
1599                 <field name="createMap" type="BOOL" />
1600                 <pad bytes="1" />
1601                 <field name="map_flags" type="CARD8" mask="IMFlag" />
1602                 <field name="map_whichGroups" type="CARD8" mask="IMGroupsWhich" />
1603                 <field name="map_groups" type="CARD8" mask="SetOfGroups" />
1604                 <field name="map_whichMods" type="CARD8" mask="IMModsWhich" />
1605                 <field name="map_realMods" type="CARD8" mask="ModMask" />
1606                 <field name="map_vmods" type="CARD16" mask="VMod" />
1607                 <field name="map_ctrls" type="CARD32" mask="BoolCtrl" />
1608         </request>
1609
1610         <request name="GetNames" opcode="17">
1611                 <field name="deviceSpec" type="DeviceSpec" />
1612                 <pad bytes="2" />
1613                 <field name="which" type="CARD32" mask="NameDetail" />
1614                 <reply>
1615                         <field name="deviceID" type="CARD8" />
1616                         <field name="which" type="CARD32" mask="NameDetail" />
1617                         <field name="minKeyCode" type="KEYCODE" />
1618                         <field name="maxKeyCode" type="KEYCODE" />
1619                         <field name="nTypes" type="CARD8" />
1620                         <field name="groupNames" type="CARD8" mask="SetOfGroup" />
1621                         <field name="virtualMods" type="CARD16" mask="VMod" />
1622                         <field name="firstKey" type="KEYCODE" />
1623                         <field name="nKeys" type="CARD8" />
1624                         <field name="indicators" type="CARD32" />
1625                         <field name="nRadioGroups" type="CARD8" />
1626                         <field name="nKeyAliases" type="CARD8" />
1627                         <field name="nKTLevels" type="CARD16" />
1628                         <pad bytes="4" />
1629                         <switch name="valueList">
1630                                 <fieldref>which</fieldref>
1631                                 <bitcase>
1632                                         <enumref ref="NameDetail">Keycodes</enumref>
1633                                         <field name="keycodesName" type="ATOM" />
1634                                 </bitcase>
1635                                 <bitcase>
1636                                         <enumref ref="NameDetail">Geometry</enumref>
1637                                         <field name="geometryName" type="ATOM" />
1638                                 </bitcase>
1639                                 <bitcase>
1640                                         <enumref ref="NameDetail">Symbols</enumref>
1641                                         <field name="symbolsName" type="ATOM" />
1642                                 </bitcase>
1643                                 <bitcase>
1644                                         <enumref ref="NameDetail">PhysSymbols</enumref>
1645                                         <field name="physSymbolsName" type="ATOM" />
1646                                 </bitcase>
1647                                 <bitcase>
1648                                         <enumref ref="NameDetail">Types</enumref>
1649                                         <field name="typesName" type="ATOM" />
1650                                 </bitcase>
1651                                 <bitcase>
1652                                         <enumref ref="NameDetail">Compat</enumref>
1653                                         <field name="compatName" type="ATOM" />
1654                                 </bitcase>
1655                                 <bitcase>
1656                                         <enumref ref="NameDetail">KeyTypeNames</enumref>
1657                                         <list name="typeNames" type="ATOM">
1658                                                 <fieldref>nTypes</fieldref>
1659                                         </list>
1660                                 </bitcase>
1661                                 <bitcase>
1662                                         <enumref ref="NameDetail">KTLevelNames</enumref>
1663                                         <list name="nLevelsPerType" type="CARD8">
1664                                           <!-- Xlib uses NTypes here - 
1665                                                the spec says nKTLevels is correct, but
1666                                                it does not work in reality
1667                                                <fieldref>nKTLevels</fieldref> -->
1668                                                 <fieldref>nTypes</fieldref>
1669                                         </list>
1670                                         <list type="CARD8" name="alignment_pad">
1671                                             <op op="-">
1672                                                 <op op="&amp;">
1673                                                     <op op="+">
1674                                                         <fieldref>nTypes</fieldref>
1675                                                         <value>3</value>
1676                                                     </op>
1677                                                     <unop op="~">
1678                                                         <value>3</value>
1679                                                     </unop>
1680                                                 </op>
1681                                                 <fieldref>nTypes</fieldref>
1682                                             </op>
1683                                         </list>
1684                                         <list name="ktLevelNames" type="ATOM">
1685                                                 <sumof ref="nLevelsPerType" />
1686                                         </list>
1687                                 </bitcase>
1688                                 <bitcase>
1689                                         <enumref ref="NameDetail">IndicatorNames</enumref>
1690                                         <list name="indicatorNames" type="ATOM">
1691                                                 <popcount>
1692                                                         <fieldref>indicators</fieldref>
1693                                                 </popcount>
1694                                         </list>
1695                                 </bitcase>
1696                                 <bitcase>
1697                                         <enumref ref="NameDetail">VirtualModNames</enumref>
1698                                         <list name="virtualModNames" type="ATOM">
1699                                                 <popcount>
1700                                                         <fieldref>virtualMods</fieldref>
1701                                                 </popcount>
1702                                         </list>
1703                                 </bitcase>
1704                                 <bitcase>
1705                                         <enumref ref="NameDetail">GroupNames</enumref>
1706                                         <list name="groups" type="ATOM">
1707                                                 <popcount>
1708                                                         <fieldref>groupNames</fieldref>
1709                                                 </popcount>
1710                                         </list>
1711                                 </bitcase>
1712                                 <bitcase>
1713                                         <enumref ref="NameDetail">KeyNames</enumref>
1714                                         <list name="keyNames" type="KeyName">
1715                                                 <fieldref>nKeys</fieldref>
1716                                         </list>
1717                                 </bitcase>
1718                                 <bitcase>
1719                                         <enumref ref="NameDetail">KeyAliases</enumref>
1720                                         <list name="keyAliases" type="KeyAlias">
1721                                                 <fieldref>nKeyAliases</fieldref>
1722                                         </list>
1723                                 </bitcase>
1724                                 <bitcase>
1725                                         <enumref ref="NameDetail">RGNames</enumref>
1726                                         <list name="radioGroupNames" type="ATOM">
1727                                                 <fieldref>nRadioGroups</fieldref>
1728                                         </list>
1729                                 </bitcase>
1730                         </switch>
1731                 </reply>
1732         </request>
1733
1734         <request name="SetNames" opcode="18">
1735                 <field name="deviceSpec" type="DeviceSpec" />
1736                 <field name="virtualMods" type="CARD16" mask="VMod" />
1737                 <field name="which" type="CARD32" mask="NameDetail" />
1738                 <field name="firstType" type="CARD8" />
1739                 <field name="nTypes" type="CARD8" />
1740                 <field name="firstKTLevelt" type="CARD8" />
1741                 <field name="nKTLevels" type="CARD8" />
1742                 <field name="indicators" type="CARD32" />
1743                 <field name="groupNames" type="CARD8" mask="SetOfGroup" />
1744                 <field name="nRadioGroups" type="CARD8" />
1745                 <field name="firstKey" type="KEYCODE" />
1746                 <field name="nKeys" type="CARD8" />
1747                 <field name="nKeyAliases" type="CARD8"/>
1748                 <pad bytes="1" />
1749                 <field name="totalKTLevelNames" type="CARD16" />
1750                 <switch name="values">
1751                         <fieldref>which</fieldref>
1752                         <bitcase>
1753                                 <enumref ref="NameDetail">Keycodes</enumref>
1754                                 <field name="keycodesName" type="ATOM" />
1755                         </bitcase>
1756                         <bitcase>
1757                                 <enumref ref="NameDetail">Geometry</enumref>
1758                                 <field name="geometryName" type="ATOM" />
1759                         </bitcase>
1760                         <bitcase>
1761                                 <enumref ref="NameDetail">Symbols</enumref>
1762                                 <field name="symbolsName" type="ATOM" />
1763                         </bitcase>
1764                         <bitcase>
1765                                 <enumref ref="NameDetail">PhysSymbols</enumref>
1766                                 <field name="physSymbolsName" type="ATOM" />
1767                         </bitcase>
1768                         <bitcase>
1769                                 <enumref ref="NameDetail">Types</enumref>
1770                                 <field name="typesName" type="ATOM" />
1771                         </bitcase>
1772                         <bitcase>
1773                                 <enumref ref="NameDetail">Compat</enumref>
1774                                 <field name="compatName" type="ATOM" />
1775                         </bitcase>
1776                         <bitcase>
1777                                 <enumref ref="NameDetail">KeyTypeNames</enumref>
1778                                 <list name="typeNames" type="ATOM">
1779                                         <fieldref>nTypes</fieldref>
1780                                 </list>
1781                         </bitcase>
1782                         <bitcase>
1783                                 <enumref ref="NameDetail">KTLevelNames</enumref>
1784                                 <list name="nLevelsPerType" type="CARD8">
1785                                         <fieldref>nTypes</fieldref>
1786                                 </list>
1787                                 <list name="ktLevelNames" type="ATOM">
1788                                         <sumof ref="nLevelsPerType" />
1789                                 </list>
1790                         </bitcase>
1791                         <bitcase>
1792                                 <enumref ref="NameDetail">IndicatorNames</enumref>
1793                                 <list name="indicatorNames" type="ATOM">
1794                                         <popcount>
1795                                                 <fieldref>indicators</fieldref>
1796                                         </popcount>
1797                                 </list>
1798                         </bitcase>
1799                         <bitcase>
1800                                 <enumref ref="NameDetail">VirtualModNames</enumref>
1801                                 <list name="virtualModNames" type="ATOM">
1802                                         <popcount>
1803                                                 <fieldref>virtualMods</fieldref>
1804                                         </popcount>
1805                                 </list>
1806                         </bitcase>
1807                         <bitcase>
1808                                 <enumref ref="NameDetail">GroupNames</enumref>
1809                                 <list name="groups" type="ATOM">
1810                                         <popcount>
1811                                                 <fieldref>groupNames</fieldref>
1812                                         </popcount>
1813                                 </list>
1814                         </bitcase>
1815                         <bitcase>
1816                                 <enumref ref="NameDetail">KeyNames</enumref>
1817                                 <list name="keyNames" type="KeyName">
1818                                         <fieldref>nKeys</fieldref>
1819                                 </list>
1820                         </bitcase>
1821                         <bitcase>
1822                                 <enumref ref="NameDetail">KeyAliases</enumref>
1823                                 <list name="keyAliases" type="KeyAlias">
1824                                         <fieldref>nKeyAliases</fieldref>
1825                                 </list>
1826                         </bitcase>
1827                         <bitcase>
1828                                 <enumref ref="NameDetail">RGNames</enumref>
1829                                 <list name="radioGroupNames" type="ATOM">
1830                                         <fieldref>nRadioGroups</fieldref>
1831                                 </list>
1832                         </bitcase>
1833                 </switch>
1834         </request>
1835
1836         <!-- XXX: Property and doodads are broken, which renders GetGeometry useless
1837         <request name="GetGeometry" opcode="19">
1838                 <field name="deviceSpec" type="DeviceSpec" />
1839                 <pad bytes="2" />
1840                 <field name="name" type="ATOM" />
1841                 <reply>
1842                         <field name="deviceID" type="CARD8" />
1843                         <field name="name" type="ATOM" />
1844                         <field name="found" type="BOOL" />
1845                         <pad bytes="1" />
1846                         <field name="widthMM" type="CARD16" />
1847                         <field name="heightMM" type="CARD16" />
1848                         <field name="nProperties" type="CARD16" />
1849                         <field name="nColors" type="CARD16" />
1850                         <field name="nShapes" type="CARD16" />
1851                         <field name="nSections" type="CARD16" />
1852                         <field name="nDoodads" type="CARD16" />
1853                         <field name="nKeyAliases" type="CARD16" />
1854                         <field name="baseColorNdx" type="CARD8" />
1855                         <field name="labelColorNdx" type="CARD8" />
1856                         <field name="labelFont" type="CountedString16" />
1857                         <list name="properties" type="Property">
1858                                 <fieldref>nProperties</fieldref>
1859                         </list>
1860                         <list name="colors" type="CountedString16">
1861                                 <fieldref>nColors</fieldref>
1862                         </list>
1863                         <list name="shapes" type="Shape">
1864                                 <fieldref>nShapes</fieldref>
1865                         </list>
1866                         <list name="sections" type="Section">
1867                                 <fieldref>nSections</fieldref>
1868                         </list>
1869                         <list name="doodads" type="Doodad">
1870                                 <fieldref>nDoodads</fieldref>
1871                         </list>
1872                         <list name="keyAliases" type="KeyAlias">
1873                                 <fieldref>nKeyAliases</fieldref>
1874                         </list>
1875                 </reply>
1876         </request>
1877         -->
1878
1879         <!-- XXX: Property and doodads are broken, which renders SetGeometry useless
1880         <request name="SetGeometry" opcode="20">
1881                 <field name="deviceSpec" type="DeviceSpec" />
1882                 <field name="nShapes" type="CARD8" />
1883                 <field name="nSections" type="CARD8" />
1884                 <field name="name" type="ATOM" />
1885                 <field name="widthMM" type="CARD16" />
1886                 <field name="heightMM" type="CARD16" />
1887                 <field name="nProperties" type="CARD16" />
1888                 <field name="nColors" type="CARD16" />
1889                 <field name="nDoodads" type="CARD16" />
1890                 <field name="nKeyAliases" type="CARD16" />
1891                 <field name="baseColorNdx" type="CARD8" />
1892                 <field name="labelColorNdx" type="CARD8" />
1893                 <pad bytes="2" />
1894                 <field name="labelFont" type="CountedString16" />
1895                 <list name="properties" type="Property">
1896                         <fieldref>nProperties</fieldref>
1897                 </list>
1898                 <list name="colors" type="CountedString16">
1899                         <fieldref>nColors</fieldref>
1900                 </list>
1901                 <list name="shapes" type="Shape">
1902                         <fieldref>nShapes</fieldref>
1903                 </list>
1904                 <list name="sections" type="Section">
1905                         <fieldref>nSections</fieldref>
1906                 </list>
1907                 <list name="doodads" type="Doodad">
1908                         <fieldref>nDoodads</fieldref>
1909                 </list>
1910                 <list name="keyAliases" type="KeyAlias">
1911                         <fieldref>nKeyAliases</fieldref>
1912                 </list>
1913         </request>
1914         -->
1915
1916         <request name="PerClientFlags" opcode="21">
1917                 <field name="deviceSpec" type="DeviceSpec" />
1918                 <pad bytes="2" />
1919                 <field name="change" type="CARD32" mask="PerClientFlag" />
1920                 <field name="value" type="CARD32" mask="PerClientFlag" />
1921                 <field name="ctrlsToChange" type="CARD32" mask="BoolCtrl" />
1922                 <field name="autoCtrls" type="CARD32" mask="BoolCtrl" />
1923                 <field name="autoCtrlsValues" type="CARD32" mask="BoolCtrl" />
1924                 <reply>
1925                         <field name="deviceID" type="CARD8"/>
1926                         <field name="supported" type="CARD32" mask="PerClientFlag" />
1927                         <field name="value" type="CARD32" mask="PerClientFlag" />
1928                         <field name="autoCtrls" type="CARD32" mask="BoolCtrl" />
1929                         <field name="autoCtrlsValues" type="CARD32" mask="BoolCtrl" />
1930                         <pad bytes="8" />
1931                 </reply>
1932         </request>
1933
1934         <request name="ListComponents" opcode="22">
1935                 <field name="deviceSpec" type="DeviceSpec" />
1936                 <field name="maxNames" type="CARD16" />
1937                 <!-- XXX: Intermixed fixed size fields and lists are broken
1938                 <field name="keymapsSpecLen" type="CARD8" />
1939                 <list name="keymapsSpec" type="STRING8">
1940                         <fieldref>keymapsSpecLen</fieldref>
1941                 </list>
1942                 <field name="keycodesSpecLen" type="CARD8" />
1943                 <list name="keycodesSpec" type="STRING8">
1944                         <fieldref>keycodesSpecLen</fieldref>
1945                 </list>
1946                 <field name="typesSpecLen" type="CARD8" />
1947                 <list name="typesSpec" type="STRING8">
1948                         <fieldref>typesSpecLen</fieldref>
1949                 </list>
1950                 <field name="compatMapSpecLen" type="CARD8" />
1951                 <list name="compatMapSpec" type="STRING8">
1952                         <fieldref>compatMapSpecLen</fieldref>
1953                 </list>
1954                 <field name="symbolsSpecLen" type="CARD8" />
1955                 <list name="symbolsSpec" type="STRING8">
1956                         <fieldref>symbolsSpecLen</fieldref>
1957                 </list>
1958                 <field name="geometrySpecLen" type="CARD8" />
1959                 <list name="geometrySpec" type="STRING8">
1960                         <fieldref>geometrySpecLen</fieldref>
1961                 </list>
1962                 -->
1963                 <reply>
1964                         <field name="deviceID" type="CARD8" />
1965                         <field name="nKeymaps" type="CARD16" />
1966                         <field name="nKeycodes" type="CARD16" />
1967                         <field name="nTypes" type="CARD16" />
1968                         <field name="nCompatMaps" type="CARD16" />
1969                         <field name="nSymbols" type="CARD16" />
1970                         <field name="nGeometries" type="CARD16" />
1971                         <field name="extra" type="CARD16" />
1972                         <pad bytes="10" />
1973                         <list name="keymaps" type="Listing">
1974                                 <fieldref>nKeymaps</fieldref>
1975                         </list>
1976                         <list name="keycodes" type="Listing">
1977                                 <fieldref>nKeycodes</fieldref>
1978                         </list>
1979                         <list name="types" type="Listing">
1980                                 <fieldref>nTypes</fieldref>
1981                         </list>
1982                         <list name="compatMaps" type="Listing">
1983                                 <fieldref>nCompatMaps</fieldref>
1984                         </list>
1985                         <list name="symbols" type="Listing">
1986                                 <fieldref>nSymbols</fieldref>
1987                         </list>
1988                         <list name="geometries" type="Listing">
1989                                 <fieldref>nGeometries</fieldref>
1990                         </list>
1991                 </reply>
1992         </request>
1993
1994         <request name="GetKbdByName" opcode="23">
1995                 <field name="deviceSpec" type="DeviceSpec" />
1996                 <field name="need" type="CARD16" mask="GBNDetail" />
1997                 <field name="want" type="CARD16" mask="GBNDetail" />
1998                 <field name="load" type="BOOL" />
1999                 <pad bytes="1" />
2000                 <!-- XXX: Intermixed fixed size fields and lists are broken
2001                 <field name="keymapsSpecLen" type="CARD8" />
2002                 <list name="keymapsSpec" type="STRING8">
2003                         <fieldref>keymapsSpecLen</fieldref>
2004                 </list>
2005                 <field name="keycodesSpecLen" type="CARD8" />
2006                 <list name="keycodesSpec" type="STRING8">
2007                         <fieldref>keycodesSpecLen</fieldref>
2008                 </list>
2009                 <field name="typesSpecLen" type="CARD8" />
2010                 <list name="typesSpec" type="STRING8">
2011                         <fieldref>typesSpecLen</fieldref>
2012                 </list>
2013                 <field name="compatMapSpecLen" type="CARD8" />
2014                 <list name="compatMapSpec" type="STRING8">
2015                         <fieldref>compatMapSpecLen</fieldref>
2016                 </list>
2017                 <field name="symbolsSpecLen" type="CARD8" />
2018                 <list name="symbolsSpec" type="STRING8">
2019                         <fieldref>symbolsSpecLen</fieldref>
2020                 </list>
2021                 <field name="geometrySpecLen" type="CARD8" />
2022                 <list name="geometrySpec" type="STRING8">
2023                         <fieldref>geometrySpecLen</fieldref>
2024                 </list>
2025                 -->
2026                 <reply>
2027                         <field name="deviceID" type="CARD8" />
2028                         <field name="minKeyCode" type="KEYCODE" />
2029                         <field name="maxKeyCode" type="KEYCODE" />
2030                         <field name="loaded" type="BOOL" />
2031                         <field name="newKeyboard" type="BOOL" />
2032                         <field name="found" type="CARD16" mask="GBNDetail" />
2033                         <field name="reported" type="CARD16" mask="GBNDetail" />
2034                         <pad bytes="16" />
2035                         <switch name="replies">
2036                                 <fieldref>reported</fieldref>
2037                                 <bitcase name="types">
2038                                         <enumref ref="GBNDetail">Types</enumref>
2039                                         <enumref ref="GBNDetail">ClientSymbols</enumref>
2040                                         <enumref ref="GBNDetail">ServerSymbols</enumref>
2041                                         <!-- from the spec, this has to be a GetMap reply -->
2042                                         <field name="getmap_type" type="CARD8" />
2043                                         <!-- done 'emulating' GetMap reply header-->
2044                                         <field name="typeDeviceID" type="CARD8" />
2045                                         <!-- from the spec, this has to be a GetMap reply -->
2046                                         <field name="getmap_sequence" type="CARD16" />
2047                                         <field name="getmap_length" type="CARD32" />
2048                                         <!-- done 'emulating' GetMap reply header-->
2049                                         <pad bytes="2" />
2050                                         <field name="typeMinKeyCode" type="KEYCODE" />
2051                                         <field name="typeMaxKeyCode" type="KEYCODE" />
2052                                         <field name="present" type="CARD16" mask="MapPart" />
2053                                         <field name="firstType" type="CARD8" />
2054                                         <field name="nTypes" type="CARD8" />
2055                                         <field name="totalTypes" type="CARD8" />
2056                                         <field name="firstKeySym" type="KEYCODE" />
2057                                         <field name="totalSyms" type="CARD16" />
2058                                         <field name="nKeySyms" type="CARD8" />
2059                                         <field name="firstKeyAction" type="KEYCODE" />
2060                                         <field name="totalActions" type="CARD16" />
2061                                         <field name="nKeyActions" type="CARD8" />
2062                                         <field name="firstKeyBehavior" type="KEYCODE" />
2063                                         <field name="nKeyBehaviors" type="CARD8" />
2064                                         <field name="totalKeyBehaviors" type="CARD8" />
2065                                         <field name="firstKeyExplicit" type="KEYCODE" />
2066                                         <field name="nKeyExplicit" type="CARD8" />
2067                                         <field name="totalKeyExplicit" type="CARD8" />
2068                                         <field name="firstModMapKey" type="KEYCODE" />
2069                                         <field name="nModMapKeys" type="CARD8" />
2070                                         <field name="totalModMapKeys" type="CARD8" />
2071                                         <field name="firstVModMapKey" type="KEYCODE" />
2072                                         <field name="nVModMapKeys" type="CARD8" />
2073                                         <field name="totalVModMapKeys" type="CARD8" />
2074                                         <pad bytes="1" />
2075                                         <field name="virtualMods" type="CARD16" mask="VMod" />
2076                                         <switch name="map">
2077                                                 <fieldref>present</fieldref>
2078                                                 <bitcase>
2079                                                         <enumref ref="MapPart">KeyTypes</enumref>
2080                                                         <list name="types_rtrn" type="KeyType">
2081                                                                 <fieldref>nTypes</fieldref>
2082                                                         </list>
2083                                                 </bitcase>
2084                                                 <bitcase>
2085                                                         <enumref ref="MapPart">KeySyms</enumref>
2086                                                         <list name="syms_rtrn" type="KeySymMap">
2087                                                                 <fieldref>nKeySyms</fieldref>
2088                                                         </list>
2089                                                 </bitcase>
2090                                                 <bitcase>
2091                                                         <enumref ref="MapPart">KeyActions</enumref>
2092                                                         <list name="acts_rtrn_count" type="CARD8">
2093                                                                 <fieldref>nKeyActions</fieldref>
2094                                                         </list>
2095                                                         <list name="acts_rtrn_acts" type="Action">
2096                                                                 <fieldref>totalActions</fieldref>
2097                                                         </list>
2098                                                 </bitcase>
2099                                                 <bitcase>
2100                                                         <enumref ref="MapPart">KeyBehaviors</enumref>
2101                                                         <list name="behaviors_rtrn" type="SetBehavior">
2102                                                                 <fieldref>totalKeyBehaviors</fieldref>
2103                                                         </list>
2104                                                 </bitcase>
2105                                                 <bitcase>
2106                                                         <enumref ref="MapPart">VirtualMods</enumref>
2107                                                         <list name="vmods_rtrn" type="CARD8" mask="ModMask">
2108                                                                 <popcount><fieldref>virtualMods</fieldref></popcount>
2109                                                         </list>
2110                                                 </bitcase>
2111                                                 <bitcase>
2112                                                         <enumref ref="MapPart">ExplicitComponents</enumref>
2113                                                         <list name="explicit_rtrn" type="SetExplicit">
2114                                                                 <fieldref>totalKeyExplicit</fieldref>
2115                                                         </list>
2116                                                 </bitcase>
2117                                                 <bitcase>
2118                                                         <enumref ref="MapPart">ModifierMap</enumref>
2119                                                         <list name="modmap_rtrn" type="KeyModMap">
2120                                                                 <fieldref>totalModMapKeys</fieldref>
2121                                                         </list>
2122                                                 </bitcase>
2123                                                 <bitcase>
2124                                                         <enumref ref="MapPart">VirtualModMap</enumref>
2125                                                         <list name="vmodmap_rtrn" type="KeyVModMap">
2126                                                                 <fieldref>totalVModMapKeys</fieldref>
2127                                                         </list>
2128                                                 </bitcase>
2129                                         </switch>
2130                                 </bitcase>
2131                                 <bitcase name="compat_map">
2132                                         <enumref ref="GBNDetail">CompatMap</enumref>
2133                                         <!-- from the spec, this has to include a reply header -->
2134                                         <field name="compatmap_type" type="CARD8" />
2135                                         <field name="compatDeviceID" type="CARD8" />
2136                                         <field name="compatmap_sequence" type="CARD16" />
2137                                         <field name="compatmap_length" type="CARD32" />
2138                                         <!-- done 'emulating' reply header -->
2139                                         <field name="groupsRtrn" type="CARD8" mask="SetOfGroup" />
2140                                         <pad bytes="1" />
2141                                         <field name="firstSIRtrn" type="CARD16" />
2142                                         <field name="nSIRtrn" type="CARD16" />
2143                                         <field name="nTotalSI" type="CARD16" />
2144                                         <pad bytes="16" />
2145                                         <list name="si_rtrn" type="SymInterpret">
2146                                                 <fieldref>nSIRtrn</fieldref>
2147                                         </list>
2148                                         <list name="group_rtrn" type="ModDef">
2149                                                 <popcount>
2150                                                         <fieldref>groupsRtrn</fieldref>
2151                                                 </popcount>
2152                                         </list>
2153                                 </bitcase>
2154                                 <bitcase name="indicator_maps">
2155                                         <enumref ref="GBNDetail">IndicatorMaps</enumref>
2156                                         <!-- from the spec, this has to include a reply header -->
2157                                         <field name="indicatormap_type" type="CARD8" />
2158                                         <field name="indicatorDeviceID" type="CARD8" />
2159                                         <field name="indicatormap_sequence" type="CARD16" />
2160                                         <field name="indicatormap_length" type="CARD32" />
2161                                         <!-- done 'emulating' reply header -->
2162                                         <field name="which" type="CARD32" />
2163                                         <field name="realIndicators" type="CARD32" />
2164                                         <field name="nIndicators" type="CARD8" />
2165                                         <pad bytes="15" />
2166                                         <list name="maps" type="IndicatorMap">
2167                                                 <fieldref>nIndicators</fieldref>
2168                                         </list>
2169                                 </bitcase>
2170                                 <bitcase name="key_names">
2171                                         <enumref ref="GBNDetail">KeyNames</enumref>
2172                                         <enumref ref="GBNDetail">OtherNames</enumref>
2173                                         <!-- from the spec, this has to include a reply header -->
2174                                         <field name="keyname_type" type="CARD8" />
2175                                         <field name="keyDeviceID" type="CARD8" />
2176                                         <field name="keyname_sequence" type="CARD16" />
2177                                         <field name="keyname_length" type="CARD32" />
2178                                         <!-- done 'emulating' reply header -->
2179                                         <field name="which" type="CARD32" mask="NameDetail" />
2180                                         <field name="keyMinKeyCode" type="KEYCODE" />
2181                                         <field name="keyMaxKeyCode" type="KEYCODE" />
2182                                         <field name="nTypes" type="CARD8" />
2183                                         <field name="groupNames" type="CARD8" mask="SetOfGroup" />
2184                                         <field name="virtualMods" type="CARD16" mask="VMod" />
2185                                         <field name="firstKey" type="KEYCODE" />
2186                                         <field name="nKeys" type="CARD8" />
2187                                         <field name="indicators" type="CARD32" />
2188                                         <field name="nRadioGroups" type="CARD8" />
2189                                         <field name="nKeyAliases" type="CARD8" />
2190                                         <field name="nKTLevels" type="CARD16" />
2191                                         <pad bytes="4" />
2192                                         <switch name="valueList">
2193                                                 <fieldref>which</fieldref>
2194                                                 <bitcase>
2195                                                         <enumref ref="NameDetail">Keycodes</enumref>
2196                                                         <field name="keycodesName" type="ATOM" />
2197                                                 </bitcase>
2198                                                 <bitcase>
2199                                                         <enumref ref="NameDetail">Geometry</enumref>
2200                                                         <field name="geometryName" type="ATOM" />
2201                                                 </bitcase>
2202                                                 <bitcase>
2203                                                         <enumref ref="NameDetail">Symbols</enumref>
2204                                                         <field name="symbolsName" type="ATOM" />
2205                                                 </bitcase>
2206                                                 <bitcase>
2207                                                         <enumref ref="NameDetail">PhysSymbols</enumref>
2208                                                         <field name="physSymbolsName" type="ATOM" />
2209                                                 </bitcase>
2210                                                 <bitcase>
2211                                                         <enumref ref="NameDetail">Types</enumref>
2212                                                         <field name="typesName" type="ATOM" />
2213                                                 </bitcase>
2214                                                 <bitcase>
2215                                                         <enumref ref="NameDetail">Compat</enumref>
2216                                                         <field name="compatName" type="ATOM" />
2217                                                 </bitcase>
2218                                                 <bitcase>
2219                                                         <enumref ref="NameDetail">KeyTypeNames</enumref>
2220                                                         <list name="typeNames" type="ATOM">
2221                                                                 <fieldref>nTypes</fieldref>
2222                                                         </list>
2223                                                 </bitcase>
2224                                                 <bitcase>
2225                                                         <enumref ref="NameDetail">KTLevelNames</enumref>
2226                                                         <list name="nLevelsPerType" type="CARD8">
2227                                                                 <fieldref>nTypes</fieldref>
2228                                                         </list>
2229                                                         <list name="ktLevelNames" type="ATOM">
2230                                                                 <sumof ref="nLevelsPerType" />
2231                                                         </list>
2232                                                 </bitcase>
2233                                                 <bitcase>
2234                                                         <enumref ref="NameDetail">IndicatorNames</enumref>
2235                                                         <list name="indicatorNames" type="ATOM">
2236                                                                 <popcount>
2237                                                                         <fieldref>indicators</fieldref>
2238                                                                 </popcount>
2239                                                         </list>
2240                                                 </bitcase>
2241                                                 <bitcase>
2242                                                         <enumref ref="NameDetail">VirtualModNames</enumref>
2243                                                         <list name="virtualModNames" type="ATOM">
2244                                                                 <popcount>
2245                                                                         <fieldref>virtualMods</fieldref>
2246                                                                 </popcount>
2247                                                         </list>
2248                                                 </bitcase>
2249                                                 <bitcase>
2250                                                         <enumref ref="NameDetail">GroupNames</enumref>
2251                                                         <list name="groups" type="ATOM">
2252                                                                 <popcount>
2253                                                                         <fieldref>groupNames</fieldref>
2254                                                                 </popcount>
2255                                                         </list>
2256                                                 </bitcase>
2257                                                 <bitcase>
2258                                                         <enumref ref="NameDetail">KeyNames</enumref>
2259                                                         <list name="keyNames" type="KeyName">
2260                                                                 <fieldref>nKeys</fieldref>
2261                                                         </list>
2262                                                 </bitcase>
2263                                                 <bitcase>
2264                                                         <enumref ref="NameDetail">KeyAliases</enumref>
2265                                                         <list name="keyAliases" type="KeyAlias">
2266                                                                 <fieldref>nKeyAliases</fieldref>
2267                                                         </list>
2268                                                 </bitcase>
2269                                                 <bitcase>
2270                                                         <enumref ref="NameDetail">RGNames</enumref>
2271                                                         <list name="radioGroupNames" type="ATOM">
2272                                                                 <fieldref>nRadioGroups</fieldref>
2273                                                         </list>
2274                                                 </bitcase>
2275                                         </switch>
2276                                 </bitcase>
2277                                 <bitcase name="geometry">
2278                                         <enumref ref="GBNDetail">Geometry</enumref>
2279                                         <!-- from the spec, this has to include a reply header -->
2280                                         <field name="geometry_type" type="CARD8" />
2281                                         <field name="geometryDeviceID" type="CARD8" />
2282                                         <field name="geometry_sequence" type="CARD16" />
2283                                         <field name="geometry_length" type="CARD32" />
2284                                         <!-- done 'emulating' reply header -->
2285                                         <field name="name" type="ATOM" />
2286                                         <field name="geometryFound" type="BOOL" />
2287                                         <pad bytes="1" />
2288                                         <field name="widthMM" type="CARD16" />
2289                                         <field name="heightMM" type="CARD16" />
2290                                         <field name="nProperties" type="CARD16" />
2291                                         <field name="nColors" type="CARD16" />
2292                                         <field name="nShapes" type="CARD16" />
2293                                         <field name="nSections" type="CARD16" />
2294                                         <field name="nDoodads" type="CARD16" />
2295                                         <field name="nKeyAliases" type="CARD16" />
2296                                         <field name="baseColorNdx" type="CARD8" />
2297                                         <field name="labelColorNdx" type="CARD8" />
2298                                         <field name="labelFont" type="CountedString16" />
2299                                         <!-- XXX: Property is broken
2300                                         <list name="properties" type="Property">
2301                                                 <fieldref>nProperties</fieldref>
2302                                         </list>
2303                                         <list name="colors" type="CountedString16">
2304                                                 <fieldref>nColors</fieldref>
2305                                         </list>
2306                                         <list name="shapes" type="Shape">
2307                                                 <fieldref>nShapes</fieldref>
2308                                         </list>
2309                                         -->
2310                                         <!-- XXX: doodads are broken
2311                                         <list name="sections" type="Section">
2312                                                 <fieldref>nSections</fieldref>
2313                                         </list>
2314                                         <list name="doodads" type="Doodad">
2315                                                 <fieldref>nDoodads</fieldref>
2316                                         </list>
2317                                         <list name="keyAliases" type="KeyAlias">
2318                                                 <fieldref>nKeyAliases</fieldref>
2319                                         </list>
2320                                         -->
2321                                 </bitcase>
2322                         </switch>
2323                 </reply>
2324         </request>
2325
2326         <request name="GetDeviceInfo" opcode="24">
2327                 <field name="deviceSpec" type="DeviceSpec" />
2328                 <field name="wanted" type="CARD16" mask="XIFeature" />
2329                 <field name="allButtons" type="BOOL" />
2330                 <field name="firstButton" type="CARD8" />
2331                 <field name="nButtons" type="CARD8" />
2332                 <pad bytes="1" />
2333                 <field name="ledClass" type="LedClassSpec" enum="LedClass" />
2334                 <field name="ledID" type="IDSpec" altenum="ID" />
2335                 <reply>
2336                         <field name="deviceID" type="CARD8" />
2337                         <field name="present" type="CARD16" mask="XIFeature" />
2338                         <field name="supported" type="CARD16" mask="XIFeature" />
2339                         <field name="unsupported" type="CARD16" mask="XIFeature" />
2340                         <field name="nDeviceLedFBs" type="CARD16" />
2341                         <field name="firstBtnWanted" type="CARD8" />
2342                         <field name="nBtnsWanted" type="CARD8" />
2343                         <field name="firstBtnRtrn" type="CARD8" />
2344                         <field name="nBtnsRtrn" type="CARD8" />
2345                         <field name="totalBtns" type="CARD8" />
2346                         <field name="hasOwnState" type="BOOL" />
2347                         <field name="dfltKbdFB" type="CARD16" altenum="ID" />
2348                         <field name="dfltLedFB" type="CARD16" altenum="ID" />
2349                         <pad bytes="2" />
2350                         <field name="devType" type="ATOM" />
2351                         <field name="nameLen" type="CARD16" />
2352                         <list name="name" type="STRING8">
2353                                 <fieldref>nameLen</fieldref>
2354                         </list>
2355                         <list name="btnActions" type="Action">
2356                                 <fieldref>nBtnsRtrn</fieldref>
2357                         </list>
2358                         <list name="leds" type="DeviceLedInfo">
2359                                 <fieldref>nDeviceLedFBs</fieldref>
2360                         </list>
2361                 </reply>
2362         </request>
2363
2364
2365         <request name="SetDeviceInfo" opcode="25">
2366                 <field name="deviceSpec" type="DeviceSpec" />
2367                 <field name="firstBtn" type="CARD8" />
2368                 <field name="nBtns" type="CARD8" />
2369                 <field name="change" type="CARD16" mask="XIFeature" />
2370                 <field name="nDeviceLedFBs" type="CARD16" />
2371                 <list name="btnActions" type="Action">
2372                         <fieldref>nBtns</fieldref>
2373                 </list>
2374                 <list name="leds" type="DeviceLedInfo">
2375                         <fieldref>nDeviceLedFBs</fieldref>
2376                 </list>
2377         </request>
2378
2379         <request name="SetDebuggingFlags" opcode="101">
2380                 <field name="msgLength" type="CARD16" />
2381                 <pad bytes="2" />
2382                 <field name="affectFlags" type="CARD32" />
2383                 <field name="flags" type="CARD32" />
2384                 <field name="affectCtrls" type="CARD32" />
2385                 <field name="ctrls" type="CARD32" />
2386                 <list name="message" type="STRING8">
2387                         <fieldref>msgLength</fieldref>
2388                 </list>
2389                 <reply>
2390                         <pad bytes="1" />
2391                         <field name="currentFlags" type="CARD32" />
2392                         <field name="currentCtrls" type="CARD32" />
2393                         <field name="supportedFlags" type="CARD32" />
2394                         <field name="supportedCtrls" type="CARD32" />
2395                         <pad bytes="8" />
2396                 </reply>
2397         </request>
2398
2399         <!-- Events -->
2400
2401         <event name="NewKeyboardNotify" number="0">
2402                 <field name="xkbType" type="CARD8" />
2403                 <field name="time" type="TIMESTAMP" />
2404                 <field name="deviceID" type="CARD8" />
2405                 <field name="oldDeviceID" type="CARD8" />
2406                 <field name="minKeyCode" type="KEYCODE" />
2407                 <field name="maxKeyCode" type="KEYCODE" />
2408                 <field name="oldMinKeyCode" type="KEYCODE" />
2409                 <field name="oldMaxKeyCode" type="KEYCODE" />
2410                 <field name="requestMajor" type="CARD8" />
2411                 <field name="requestMinor" type="CARD8" />
2412                 <field name="changed" type="CARD16" mask="NKNDetail" />
2413                 <pad bytes="14" />
2414         </event>
2415
2416         <event name="MapNotify" number="1">
2417                 <field name="xkbType" type="CARD8" />
2418                 <field name="time" type="TIMESTAMP" />
2419                 <field name="deviceID" type="CARD8" />
2420                 <field name="ptrBtnActions" type="CARD8" />
2421                 <field name="changed" type="CARD16" mask="MapPart" />
2422                 <field name="minKeyCode" type="KEYCODE" />
2423                 <field name="maxKeyCode" type="KEYCODE" />
2424                 <field name="firstType" type="CARD8" />
2425                 <field name="nTypes" type="CARD8" />
2426                 <field name="firstKeySym" type="KEYCODE" />
2427                 <field name="nKeySyms" type="CARD8" />
2428                 <field name="firstKeyAct" type="KEYCODE" />
2429                 <field name="nKeyActs" type="CARD8" />
2430                 <field name="firstKeyBehavior" type="KEYCODE" />
2431                 <field name="nKeyBehavior" type="CARD8" />
2432                 <field name="firstKeyExplicit" type="KEYCODE" />
2433                 <field name="nKeyExplicit" type="CARD8" />
2434                 <field name="firstModMapKey" type="KEYCODE" />
2435                 <field name="nModMapKeys" type="CARD8" />
2436                 <field name="firstVModMapKey" type="KEYCODE" />
2437                 <field name="nVModMapKeys" type="CARD8" />
2438                 <field name="virtualMods" type="CARD16" mask="VMod" />
2439                 <pad bytes="2" />
2440         </event>
2441
2442         <event name="StateNotify" number="2">
2443                 <field name="xkbType" type="CARD8" />
2444                 <field name="time" type="TIMESTAMP" />
2445                 <field name="deviceID" type="CARD8" />
2446                 <field name="mods" type="CARD8" mask="ModMask" />
2447                 <field name="baseMods" type="CARD8" mask="ModMask" />
2448                 <field name="latchedMods" type="CARD8" mask="ModMask" />
2449                 <field name="lockedMods" type="CARD8" mask="ModMask" />
2450                 <field name="group" type="CARD8" enum="Group" />
2451                 <field name="baseGroup" type="INT16" />
2452                 <field name="latchedGroup" type="INT16" />
2453                 <field name="lockedGroup" type="CARD8" enum="Group" />
2454                 <field name="compatState" type="CARD8" mask="ModMask" />
2455                 <field name="grabMods" type="CARD8" mask="ModMask" />
2456                 <field name="compatGrabMods" type="CARD8" mask="ModMask" />
2457                 <field name="lookupMods" type="CARD8" mask="ModMask" />
2458                 <field name="compatLoockupMods" type="CARD8" mask="ModMask" />
2459                 <field name="ptrBtnState" type="CARD16" mask="KeyButMask" />
2460                 <field name="changed" type="CARD16" mask="StatePart" />
2461                 <field name="keycode" type="KEYCODE" />
2462                 <field name="eventType" type="CARD8" />
2463                 <field name="requestMajor" type="CARD8" />
2464                 <field name="requestMinor" type="CARD8" />
2465         </event>
2466
2467         <event name="ControlsNotify" number="3">
2468                 <field name="xkbType" type="CARD8" />
2469                 <field name="time" type="TIMESTAMP" />
2470                 <field name="deviceID" type="CARD8" />
2471                 <field name="numGroups" type="CARD8" />
2472                 <pad bytes="2" />
2473                 <field name="changedControls" type="CARD32" mask="Control" />
2474                 <field name="enabledControls" type="CARD32" mask="BoolCtrl" />
2475                 <field name="enabledControlChanges" type="CARD32" mask="BoolCtrl" />
2476                 <field name="keycode" type="KEYCODE" />
2477                 <field name="eventType" type="CARD8" />
2478                 <field name="requestMajor" type="CARD8" />
2479                 <field name="requestMinor" type="CARD8" />
2480                 <pad bytes="4" />
2481         </event>
2482
2483         <event name="IndicatorStateNotify" number="4">
2484                 <field name="xkbType" type="CARD8" />
2485                 <field name="time" type="TIMESTAMP" />
2486                 <field name="deviceID" type="CARD8" />
2487                 <pad bytes="3" />
2488                 <field name="state" type="CARD32" />
2489                 <field name="stateChanged" type="CARD32" />
2490                 <pad bytes="12" />
2491         </event>
2492
2493         <event name="IndicatorMapNotify" number="5">
2494                 <field name="xkbType" type="CARD8" />
2495                 <field name="time" type="TIMESTAMP" />
2496                 <field name="deviceID" type="CARD8" />
2497                 <pad bytes="3" />
2498                 <field name="state" type="CARD32" />
2499                 <field name="mapChanged" type="CARD32" />
2500                 <pad bytes="12" />
2501         </event>
2502
2503         <event name="NamesNotify" number="6">
2504                 <field name="xkbType" type="CARD8" />
2505                 <field name="time" type="TIMESTAMP" />
2506                 <field name="deviceID" type="CARD8" />
2507                 <pad bytes="1" />
2508                 <field name="changed" type="CARD16" mask="NameDetail" />
2509                 <field name="firstType" type="CARD8" />
2510                 <field name="nTypes" type="CARD8" />
2511                 <field name="firstLevelName" type="CARD8" />
2512                 <field name="nLevelNames" type="CARD8" />
2513                 <pad bytes="1" />
2514                 <field name="nRadioGroups" type="CARD8" />
2515                 <field name="nKeyAliases" type="CARD8" />
2516                 <field name="changedGroupNames" type="CARD8" mask="SetOfGroup" />
2517                 <field name="changedVirtualMods" type="CARD16" mask="VMod" />
2518                 <field name="firstKey" type="KEYCODE" />
2519                 <field name="nKeys" type="CARD8" />
2520                 <field name="changedIndicators" type="CARD32" />
2521                 <pad bytes="4" />
2522         </event>
2523
2524         <event name="CompatMapNotify" number="7">
2525                 <field name="xkbType" type="CARD8" />
2526                 <field name="time" type="TIMESTAMP" />
2527                 <field name="deviceID" type="CARD8" />
2528                 <field name="changedGroups" type="CARD8" mask="SetOfGroup" />
2529                 <field name="firstSI" type="CARD16" />
2530                 <field name="nSI" type="CARD16" />
2531                 <field name="nTotalSI" type="CARD16" />
2532                 <pad bytes="16" />
2533         </event>
2534
2535         <event name="BellNotify" number="8">
2536                 <field name="xkbType" type="CARD8" />
2537                 <field name="time" type="TIMESTAMP" />
2538                 <field name="deviceID" type="CARD8" />
2539                 <field name="bellClass" type="CARD8" enum="BellClassResult" />
2540                 <field name="bellID" type="CARD8" />
2541                 <field name="percent" type="CARD8" />
2542                 <field name="pitch" type="CARD16" />
2543                 <field name="duration" type="CARD16" />
2544                 <field name="name" type="ATOM" />
2545                 <field name="window" type="WINDOW" />
2546                 <field name="eventOnly" type="BOOL" />
2547                 <pad bytes="7" />
2548         </event>
2549
2550         <event name="ActionMessage" number="9">
2551                 <field name="xkbType" type="CARD8" />
2552                 <field name="time" type="TIMESTAMP" />
2553                 <field name="deviceID" type="CARD8" />
2554                 <field name="keycode" type="KEYCODE" />
2555                 <field name="press" type="BOOL" />
2556                 <field name="keyEventFollows" type="BOOL" />
2557                 <field name="mods" type="CARD8" mask="ModMask" />
2558                 <field name="group" type="CARD8" enum="Group" />
2559                 <list name="message" type="STRING8">
2560                         <value>8</value>
2561                 </list>
2562                 <pad bytes="10" />
2563         </event>
2564
2565         <event name="AccessXNotify" number="10">
2566                 <field name="xkbType" type="CARD8" />
2567                 <field name="time" type="TIMESTAMP" />
2568                 <field name="deviceID" type="CARD8" />
2569                 <field name="keycode" type="KEYCODE" />
2570                 <field name="detailt" type="CARD16" mask="AXNDetail" />
2571                 <field name="slowKeysDelay" type="CARD16" />
2572                 <field name="debounceDelay" type="CARD16" />
2573                 <pad bytes="16" />
2574         </event>
2575
2576         <event name="ExtensionDeviceNotify" number="11">
2577                 <field name="xkbType" type="CARD8" />
2578                 <field name="time" type="TIMESTAMP" />
2579                 <field name="deviceID" type="CARD8" />
2580                 <pad bytes="1" />
2581                 <field name="reason" type="CARD16" mask="XIFeature" />
2582                 <field name="ledClass" type="CARD16" enum="LedClassResult" />
2583                 <field name="ledID" type="CARD16" />
2584                 <field name="ledsDefined" type="CARD32" />
2585                 <field name="ledState" type="CARD32" />
2586                 <field name="firstButton" type="CARD8" />
2587                 <field name="nButtons" type="CARD8" />
2588                 <field name="supported" type="CARD16" mask="XIFeature" />
2589                 <field name="unsupported" type="CARD16" mask="XIFeature" />
2590                 <pad bytes="2" />
2591         </event>
2592 </xcb>