Update links to use gitlab instead of cgit & cvs
[xcbproto.git] / doc / xml-xcb.txt
blob156275d791c5b0c6aa908de9a1431ee0420828aa
1                                   xcb/proto
3 Description
4 ===========
6 xcb/proto is a set of XML files describing the  X Window System protocol
7 It is designed for use with libxcb, the X C binding
8 <http://xcb.freedesktop.org/>.  xcb/proto consists of:
10 xcb.xsd      An XML Schema defining the data format for describing the X
11              protocol.
13 *.py         Code generator helpers that read the protocol descriptions
14              into python structures. See libxcb for example usage.
16 *.xml        XML descriptions of the core X protocol and many extensions.
19 Generating C bindings
20 =====================
22 See libxcb <https://gitlab.freedesktop.org/xorg/lib/libxcb>.
25 Protocol Description Format
26 ===========================
28 Root element
29 ------------
31 <xcb header="string" extension-name="string" extension-xname="string">
32   top-level elements
33 </xcb>
35   This is the root element of a protocol description.  The attributes are all
36   various forms of the extension name.  header is the basename of the XML
37   protocol description file, which will be used as the basename for generated
38   bindings as well.  extension-name is the name of the extension in InterCaps,
39   which will be used in the names of functions.  extension-xname is the name
40   of the extension as passed to QueryExtension.
42   As an example, the XML-XCB description for the GO-FASTER extension would use
43   the root element <xcb header="gofaster" extension-name="GoFaster"
44   extension-xname="GO-FASTER">; as a result, C bindings will be put in
45   gofaster.h and gofaster.c, extension functions will be named
46   XCBGoFasterFunctionName, and the extension initialization will call
47   QueryExtension with the name "GO-FASTER".
49   This element can contain any number of the elements listed in the section
50   "Top-Level Elements" below.
53 Top-Level Elements
54 ------------------
56 <import>header_name</import>
58   The import element allows the protocol description to reference types
59   declared in another extension.  The content is be the basename of the
60   extension XML file, which is also the header attribute of the extension's
61   root node.  Note that types from xproto are automatically available, without
62   explicitly importing them.
64 <struct name="identifier">structure contents</struct>
66   This element represents a data structure.  The name attribute gives the name
67   of the structure.  The content represents the fields of the structure, and
68   consists of one or more of the length, field, pad, and list elements described
69   in the section "Structure Contents" below.
71 <union name="identifier">structure contents</union>
73   This element represents a union of data types, which can hold one value of
74   any of those types.  The name attribute gives the name of the union.  The
75   content represents the fields of the union, and consists of one or more of
76   the field and pad elements described in the section "Structure Contents
77   below".
79 <eventstruct name="identifier">event-type-selector list</struct>
81   This element represents a data structure that is the wire-representation of
82   an event. The event can be any type that's selected by the
83   event-type-selector list.
85 <xidtype name="identifier" />
87   This element represents an identifier for a particular type of resource.
88   The name attribute gives the name of the new type.
90 <enum name="identifier">
91   <item name="identifier">[optional expression]</item>
92   ...
93 </enum>
95   The enum element represents an enumeration type, which can take on any of
96   the values given by the contained item elements.  The name attribute on the
97   enum gives the name of the enumerated type.
99   The item element represents one possible value of an enumerated type.  The
100   name attribute on the item gives the name of that value, and the optional
101   content is an expression giving the numeric value.  If the expression is
102   omitted, the value will be one more than that of the previous item, or 0 for
103   the first item.
105 <typedef oldname="identifier" newname="identifier" />
107   The typedef element declares the type given by the newname attribute to be
108   an alias for the type given by the oldname attribute.
110 <request name="identifier" opcode="integer" [combine-adjacent="true"]>
111   structure contents
112   [<reply>structure contents</reply>]
113 </request>
115   The request element represents an X protocol request.  The name attribute
116   gives the name of the request, and the opcode attribute gives the numeric
117   request code.  The content of the request element represents the fields in
118   the request, and consists of one or more of any of the elements listed in
119   the "Structure Contents" section below.  Note that for requests in the core
120   protocol, the first field in the request goes into the one-byte gap between
121   the major opcode and the length; if the request does not have any data in
122   that gap, put a one byte pad as the first element.  Extension requests
123   always have this gap filled with the minor opcode.
125   The optional reply element is present if the request has a reply.  The
126   content of the reply element represents the fields in the reply, and
127   consists of zero or more of the field, pad, and list elements listed in the
128   "Structure Contents" section below.  Note that the first field in the reply
129   always goes into the one-byte gap between the response type and the sequence
130   number; if the reply does not have any data in that gap, put a one byte pad
131   as the first element.
133   If the optional combine-adjacent attribute is true, multiple adjacent
134   requests of the same type may be combined into a single request without
135   affecting the semantics of the requests.
137 <event name="identifier" number="integer"
138        [[no-sequence-number="true"] | [xge="true"]]>
139   structure contents
140 </event>
142   This element represents an X protocol event.  The name attribute gives the
143   name of the event, and the number attribute gives the event number.  The
144   content of the event element represents the fields in the event, and
145   consists of zero or more of the field, pad, and list elements listed in the
146   "Structure Contents" section below.
148   If the optional no-sequence-number attribute is true, the event does not
149   include a sequence number.  This is a special-case for the KeymapNotify
150   event in the core protocol, and should not be used in any other event.
152   If the optional xge attribute is true, the event is an X Generic Event and
153   will be treated as such.
155   The no-sequence-number and xge attribute can not be combined.
157 <error name="identifier" number="integer">
158   structure contents
159 </error>
161   This element represents an X protocol error.  The name attribute gives the
162   name of the error, and the number attribute gives the error number.  The
163   content of the error element represents the fields in the error, and
164   consists of zero or more of the field, pad, and list elements listed in the
165   "Structure Contents" section below.
167 <eventcopy name="identifier" number="identifier" ref="identifier" />
169   This element creates an alias for the event named in the ref attribute, with
170   the new name given in the name attribute, and the new event number given in
171   the number attribute.
173 <errorcopy name="identifier" number="identifier" ref="identifier" />
175   This element creates an alias for the error named in the ref attribute, with
176   the new name given in the name attribute, and the new error number given in
177   the number attribute.
180 Structure Contents
181 ------------------
183 Note: "type" attributes below refer to types defined by previous elements,
184 either in the current extension, xproto, or one of the imported extensions.
185 The type name must refer to only one possible type; if more than one type
186 matches, an error occurs.  To avoid this, the type may be explicitly prefixed
187 with a namespace, which should be the value of the header attribute on the
188 protocol description containing the desired type.  The namespace and type are
189 separated by a single colon.  For example, to refer to the PIXMAP type defined
190 in glx rather than the one defined in xproto, use type="glx:PIXMAP" rather
191 than type="PIXMAP".
193 Note: Most of the below may optionally contain an enum, altenum, mask or altmask
194 attribute, which follows the above rules for "type". "enum" is an exhaustive
195 enum; the value is restricted to one of the constants named in the enum.
196 "altenum" may be one of the values contained in the enum, but it need not be.
197 "mask" refers to an exhaustive enum to be used as a bitmask.
198 "altmask" may be a mask from the referred enum, but it need not be.
200 <pad bytes="integer" serialize="bool" />
202   This element declares some padding in a data structure.  The bytes
203   attribute declares the number of bytes of padding.
205   If serialize="true", then the pad will be serialized/deserialized.
206   This is only needed for ABI compatibility with legacy.
207   Newly added pads should not be defined with serialize="true".
209   The serialize attribute may be omitted.
210   Default is serialize="false".
212 <field type="identifier" name="identifier" />
214   This element represents a field in a data structure.  The type attribute
215   declares the data type of the field, and the name attribute gives the name
216   of the field.
218 <length>expression</length>
219   This element overrides the length of the data structure by specifying it
220   explicitly instead of it being defined by the layout of the structure.
221   This makes it possible to handle structures with conditional fields
222   (see the <switch> element) where the future revisions of protocols may
223   introduce new variants and old code must still properly ignore them.
225   The content is an expression giving the length of the data structure in terms
226   of other fields in the structure.  See the section "Expressions" for details
227   on the expression representation.
229   The expression must not depend on conditional fields.
231   Additionally, the length of the data structure must be at least such that it
232   includes the fields that the expression depends on. Smaller length is
233   considered a violation of the protocol.
235 <fd name="identifier" />
237   This element represents a file descriptor field passed with the request.  The
238   name attribute gives the name of the field.
240   While ordinary fields are encoded as part of the request, file descriptor
241   fields are generally passed via an out-of-band mechanism.
243 <list type="identifier" name="identifier">expression</list>
245   This element represents an array or list of fields in a data structure.  The
246   type attribute declares the data type of the field, and the name attribute
247   gives the name of the field.  The content is an expression giving the length
248   of the list in terms of other fields in the structure.  See the section
249   "Expressions" for details on the expression representation.
251 <exprfield type="identifier" name="identifier">expression</exprfield>
253   This element represents a field in a request that is calculated rather than
254   supplied by the caller.  The type attribute declares the data type of the
255   field, and the name attribute gives the name of the field.  The content is
256   the expression giving the value of the field.  See the section "Expressions"
257   for details on the expression representation.
259 <valueparam value-mask-type="identifier" value-mask-name="identifier"
260             value-list-name="identifier" />
262   This element represents a BITMASK/LISTofVALUE parameter pair: a bitmask
263   defining the set of values included, and a list containing these values.
264   value-mask-type gives the type of the bitmask; this must be CARD16 or
265   CARD32.  value-mask-name gives the field name of the bitmask, and
266   value-list-name gives the field name of the list of values. Please use
267   <switch> instead for new protocol definitions.
269 <switch name="identifier"> switch expression
270     <bitcase [name="identifier"]> bitcase expression(s), fields </bitcase>
271     <case [name="identifier"]> case expression(s), fields </case>
272 </switch>
274   This element represents conditional inclusion of fields. It can be viewed
275   as sequence of multiple ifs:
277   <bitcase>:
278     if ( switch expression & bitcase expression ) is non-zero,
279     bitcase fields are included in structure.
281   <case>:
282     if ( switch expression == case expression ) is true,
283     then case fields are included in structure.
285   It can be used only as the last field of a structure.
287   When a bitcase or case includes multiple <enumref> clauses, the contents
288   of the bitcase or case are only present once regardless of the number of
289   bitcase or case expressions that match.
291   <enumref> inside <bitcase> can only refer to an enum's <bit> members.
292   <enumref> inside <case> can only refer to an enum's <value> members.
294   A switch may contain multiple <bitcase> or <case> elements.
295   Usually it will only contain <bitcase> elements
296   or only contain <case> elements.
297   That is, mixing of <case> and <bitcase> usually doesn't make any sense.
299   The same value may appear in multiple <case> or <bitcase> elements.
301   New protocol definitions should prefer to use this instead of <valueparam>
302   and instead of <union>.
305 Expressions
306 -----------
308   Expressions consist of a tree of <op> elements with leaves consisting of
309   <fieldref> or <value> elements.
311 <op op="operator">expression expression</op>
313   The op element represents an operator, with the op attribute specifying
314   which operator.  The supported operations are +, -, *, /, &amp;, and
315   &lt;&lt;, and their semantics are identical to the corresponding operators
316   in C.  The two operand expressions may be other expression elements.
318 <fieldref>identifier</fieldref>
320   The fieldref element represents a reference to the value of another field in
321   the structure containing this expression.  The identifier is the value of
322   the "name" attribute on the referenced field.
324 <paramref type="type">identifier</paramref>
326   A paramref is similar to a fieldref, but it refers to the value of
327   a field in the context which refers to the struct which contains the paramref.
329   So, it refers to a field outside of the structure where it is defined.
330   This has the following consequences:
331   * The generator cannot deduce its type.
332     So, it is mandatory to specify its type.
333   * The identifier-name must not be used as a field in the structure
334     which contaons the paramref.
336   For an example, see struct "DeviceTimeCoord" and request/reply
337   "GetDeviceMotionEvents" in xinput.xml, where paramref "num_axes"
338   in struct DeviceTimeCoord refers to field "num_axes" in
339   the DeviceTimeCoord reply.
341 <value>integer</value>
343   The value element represents a literal integer value in an expression.  The
344   integer may be expressed in decimal or hexadecimal.
346 <bit>integer</bit>
348   The bit element represents a literal bitmask value in an expression.
349   The integer must be in the range 0..31, expanding to (1<<n) in C.
351 <enumref ref="identifier">enum item identifier</enumref>
353   This element represents a reference to item of enum.
355 <unop op="operator">expression</unop>
357   This element represents a unary operator, with the op attribute specifying
358   which operator. The only supported operation so far is ~, and its semantic
359   is identical to the corresponding operator in C.
361 <sumof ref="identifier" />
363   This element represents a sumation of the elements of the referenced list.
365 <sumof ref="identifier" >expression</sumof>
367   The expression is evaluated for each element of the referenced list,
368   in the context of this element.
369   This sumof element then represents a sumation of the results of these
370   evaluations.
372   expression will usually be a fieldref which references a field of
373   a list-element or an expression containing a fieldref,
374   such as popcount of a fieldref.
376 <popcount>expression</popcount>
378   This element represents the number of bits set in the expression.
380 <listelement-ref/>
382   This element represents the current list-element when used inside
383   a list-iteration expression such as <sumof>.
386 Event-Type-Selector List
387 ------------------------
389   The event-type-selector list selects a set of eventtypes.
390   It consists of any number of the following elements:
392   <allowed extension="identifier" xge="boolean"
393            opcode-min="integer" opcode-max="integer" />
395   The extension attribute selects events from the given extension.
397   If the xge attribute is true, the event is an X Generic Event and
398   will be treated as such.
400   opcode-min and opcode-max describe the minimum and maximum opcode
401   respectively. The opcode is the same number as the number-attribute
402   of an event definition. I.e. this is the offset from the event-base
403   to the actual number used on the wire.
405   In the current implementation, only xge="false" is supported.
408 Documentation
409 -------------
411   Documentation for each request, reply or event is stored in the appropriate
412   element using a <doc> element. The <doc> element can contain the following
413   elements:
415 <brief>brief description</brief>
417   A short description of the request, reply or event. For example "makes a
418   window visible" for MapWindow. This will end up in the manpage NAME section
419   and in the doxygen @brief description.
421 <description><![CDATA[longer description]]></description>
423   The full description. Use `` to highlight words, such as "Draws
424   `points_len`-1 lines between each pair of points…"
426 <example><![CDATA[example code]]</description>
428   Example C code illustrating the usage of the particular request, reply or
429   event.
431 <field name="name">field description</field>
433   The full description for the specified field. Depending on the context, this
434   is either a request parameter or a reply/event datastructure field.
436 <error type="type">error description</field>
438   The full description for an error which can occur due to this request.
440 <see type="request" name="name" />
442   A reference to another relevant program, function, request or event.