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