From 4f736752bbdf3bbf1a6325af7ad470198aa5a82a Mon Sep 17 00:00:00 2001 From: marha Date: Sat, 20 Mar 2010 15:17:43 +0000 Subject: libxcb git update --- libxcb/configure.ac | 7 +- libxcb/doc/tutorial/index.html | 4 +- libxcb/src/Makefile.am | 72 +- libxcb/src/c-client.xsl | 1551 +++++++++++++++++++ libxcb/src/xcb.h | 16 + libxcb/src/xcb_auth.c | 4 +- libxcb/src/xcb_conn.c | 4 +- libxcb/src/xcb_in.c | 110 ++ libxcb/src/xcb_util.c | 25 +- libxcb/xcb-proto/autogen.sh | 12 + libxcb/xcb-proto/doc/xml-xcb.txt | 30 +- libxcb/xcb-proto/src/Makefile.am | 1 + libxcb/xcb-proto/src/ge.xml | 42 + libxcb/xcb-proto/src/import.py | 66 + libxcb/xcb-proto/src/size.py | 76 + libxcb/xcb-proto/src/type.py | 74 + libxcb/xcb-proto/src/xcb.xsd | 86 +- libxcb/xcb-proto/src/xf86vidmode.xml | 464 ++++++ libxcb/xcb-proto/src/xkb.xml | 2759 ++++++++++++++++++++++++++++++++++ 19 files changed, 5317 insertions(+), 86 deletions(-) create mode 100644 libxcb/src/c-client.xsl create mode 100644 libxcb/xcb-proto/autogen.sh create mode 100644 libxcb/xcb-proto/src/ge.xml create mode 100644 libxcb/xcb-proto/src/import.py create mode 100644 libxcb/xcb-proto/src/size.py create mode 100644 libxcb/xcb-proto/src/type.py create mode 100644 libxcb/xcb-proto/src/xf86vidmode.xml create mode 100644 libxcb/xcb-proto/src/xkb.xml diff --git a/libxcb/configure.ac b/libxcb/configure.ac index 04454e892..23f4f2253 100644 --- a/libxcb/configure.ac +++ b/libxcb/configure.ac @@ -32,7 +32,7 @@ fi AC_SUBST(HTML_CHECK_RESULT) # Checks for pkg-config packages -PKG_CHECK_MODULES(XCBPROTO, xcb-proto >= 1.5) +PKG_CHECK_MODULES(XCBPROTO, xcb-proto >= 1.6) NEEDED="pthread-stubs xau >= 0.99.2" PKG_CHECK_MODULES(NEEDED, $NEEDED) @@ -121,9 +121,8 @@ AC_PREREQ([2.59c], [], [AC_SUBST([htmldir], [m4_ifset([AC_PACKAGE_TARNAME], XCB_CHECK_DOXYGEN() case $host_os in - # darwin has poll() but can't be used to poll character devices - # darwin10 (SnowLeopard) should be tested as well once released - darwin7*) ;; darwin8*) ;; darwin9*) ;; + # darwin has poll() but can't be used to poll character devices (atleast through SnowLeopard) + darwin*) ;; *) AC_CHECK_FUNC(poll, [AC_DEFINE(USE_POLL, 1, [poll() function is available])], ) ;; diff --git a/libxcb/doc/tutorial/index.html b/libxcb/doc/tutorial/index.html index 58248079f..aa3ae1706 100644 --- a/libxcb/doc/tutorial/index.html +++ b/libxcb/doc/tutorial/index.html @@ -471,8 +471,6 @@ main () diff = end - start; /* free var */ - for (i = 0; i < count; ++i) - free (names[i]); free (atoms); free (cs); @@ -494,6 +492,8 @@ main () printf ("ratio : %f\n", diff_x / diff); free (atoms_x); + for (i = 0; i < count; ++i) + free (names[i]); free (names); XCloseDisplay (disp); diff --git a/libxcb/src/Makefile.am b/libxcb/src/Makefile.am index 8bec61387..f0bdeaa46 100644 --- a/libxcb/src/Makefile.am +++ b/libxcb/src/Makefile.am @@ -1,14 +1,8 @@ lib_LTLIBRARIES = libxcb.la -EXTHEADERS = xproto.h \ - bigreq.h \ - xc_misc.h EXTSOURCES = xproto.c \ bigreq.c \ xc_misc.c -EXTENSION_XML = xproto.xml \ - bigreq.xml \ - xc_misc.xml AM_CFLAGS = $(CWARNFLAGS) $(NEEDED_CFLAGS) $(XDMCP_CFLAGS) libxcb_la_LIBADD = $(NEEDED_LIBS) $(XDMCP_LIBS) @@ -30,9 +24,7 @@ XCB_LIBS = libxcb.la # FIXME: find a way to autogenerate this from the XML files. -EXTHEADERS += composite.h EXTSOURCES += composite.c -EXTENSION_XML += composite.xml if BUILD_COMPOSITE lib_LTLIBRARIES += libxcb-composite.la libxcb_composite_la_LDFLAGS = -version-info 0:0:0 -no-undefined @@ -40,9 +32,7 @@ libxcb_composite_la_LIBADD = $(XCB_LIBS) nodist_libxcb_composite_la_SOURCES = composite.c composite.h endif -EXTHEADERS += damage.h EXTSOURCES += damage.c -EXTENSION_XML += damage.xml if BUILD_DAMAGE lib_LTLIBRARIES += libxcb-damage.la libxcb_damage_la_LDFLAGS = -version-info 0:0:0 -no-undefined @@ -50,9 +40,7 @@ libxcb_damage_la_LIBADD = $(XCB_LIBS) nodist_libxcb_damage_la_SOURCES = damage.c damage.h endif -EXTHEADERS += dpms.h EXTSOURCES += dpms.c -EXTENSION_XML += dpms.xml if BUILD_DPMS lib_LTLIBRARIES += libxcb-dpms.la libxcb_dpms_la_LDFLAGS = -version-info 0:0:0 -no-undefined @@ -60,9 +48,7 @@ libxcb_dpms_la_LIBADD = $(XCB_LIBS) nodist_libxcb_dpms_la_SOURCES = dpms.c dpms.h endif -EXTHEADERS += dri2.h EXTSOURCES += dri2.c -EXTENSION_XML += dri2.xml if BUILD_DRI2 lib_LTLIBRARIES += libxcb-dri2.la libxcb_dri2_la_LDFLAGS = -version-info 0:0:0 -no-undefined @@ -70,9 +56,7 @@ libxcb_dri2_la_LIBADD = $(XCB_LIBS) nodist_libxcb_dri2_la_SOURCES = dri2.c dri2.h endif -EXTHEADERS += glx.h EXTSOURCES += glx.c -EXTENSION_XML += glx.xml if BUILD_GLX lib_LTLIBRARIES += libxcb-glx.la libxcb_glx_la_LDFLAGS = -version-info 0:0:0 -no-undefined @@ -80,9 +64,7 @@ libxcb_glx_la_LIBADD = $(XCB_LIBS) nodist_libxcb_glx_la_SOURCES = glx.c glx.h endif -EXTHEADERS += randr.h EXTSOURCES += randr.c -EXTENSION_XML += randr.xml if BUILD_RANDR lib_LTLIBRARIES += libxcb-randr.la libxcb_randr_la_LDFLAGS = -version-info 1:0:1 -no-undefined @@ -90,9 +72,7 @@ libxcb_randr_la_LIBADD = $(XCB_LIBS) nodist_libxcb_randr_la_SOURCES = randr.c randr.h endif -EXTHEADERS += record.h EXTSOURCES += record.c -EXTENSION_XML += record.xml if BUILD_RECORD lib_LTLIBRARIES += libxcb-record.la libxcb_record_la_LDFLAGS = -version-info 0:0:0 -no-undefined @@ -100,9 +80,7 @@ libxcb_record_la_LIBADD = $(XCB_LIBS) nodist_libxcb_record_la_SOURCES = record.c record.h endif -EXTHEADERS += render.h EXTSOURCES += render.c -EXTENSION_XML += render.xml if BUILD_RENDER lib_LTLIBRARIES += libxcb-render.la libxcb_render_la_LDFLAGS = -version-info 0:0:0 -no-undefined @@ -110,9 +88,7 @@ libxcb_render_la_LIBADD = $(XCB_LIBS) nodist_libxcb_render_la_SOURCES = render.c render.h endif -EXTHEADERS += res.h EXTSOURCES += res.c -EXTENSION_XML += res.xml if BUILD_RESOURCE lib_LTLIBRARIES += libxcb-res.la libxcb_res_la_LDFLAGS = -version-info 0:0:0 -no-undefined @@ -120,9 +96,7 @@ libxcb_res_la_LIBADD = $(XCB_LIBS) nodist_libxcb_res_la_SOURCES = res.c res.h endif -EXTHEADERS += screensaver.h EXTSOURCES += screensaver.c -EXTENSION_XML += screensaver.xml if BUILD_SCREENSAVER lib_LTLIBRARIES += libxcb-screensaver.la libxcb_screensaver_la_LDFLAGS = -version-info 0:0:0 -no-undefined @@ -130,9 +104,7 @@ libxcb_screensaver_la_LIBADD = $(XCB_LIBS) nodist_libxcb_screensaver_la_SOURCES = screensaver.c screensaver.h endif -EXTHEADERS += shape.h EXTSOURCES += shape.c -EXTENSION_XML += shape.xml if BUILD_SHAPE lib_LTLIBRARIES += libxcb-shape.la libxcb_shape_la_LDFLAGS = -version-info 0:0:0 -no-undefined @@ -140,9 +112,7 @@ libxcb_shape_la_LIBADD = $(XCB_LIBS) nodist_libxcb_shape_la_SOURCES = shape.c shape.h endif -EXTHEADERS += shm.h EXTSOURCES += shm.c -EXTENSION_XML += shm.xml if BUILD_SHM lib_LTLIBRARIES += libxcb-shm.la libxcb_shm_la_LDFLAGS = -version-info 0:0:0 -no-undefined @@ -150,9 +120,7 @@ libxcb_shm_la_LIBADD = $(XCB_LIBS) nodist_libxcb_shm_la_SOURCES = shm.c shm.h endif -EXTHEADERS += sync.h EXTSOURCES += sync.c -EXTENSION_XML += sync.xml if BUILD_SYNC lib_LTLIBRARIES += libxcb-sync.la libxcb_sync_la_LDFLAGS = -version-info 0:0:0 -no-undefined @@ -160,9 +128,7 @@ libxcb_sync_la_LIBADD = $(XCB_LIBS) nodist_libxcb_sync_la_SOURCES = sync.c sync.h endif -EXTHEADERS += xevie.h EXTSOURCES += xevie.c -EXTENSION_XML += xevie.xml if BUILD_XEVIE lib_LTLIBRARIES += libxcb-xevie.la libxcb_xevie_la_LDFLAGS = -version-info 0:0:0 -no-undefined @@ -170,9 +136,7 @@ libxcb_xevie_la_LIBADD = $(XCB_LIBS) nodist_libxcb_xevie_la_SOURCES = xevie.c xevie.h endif -EXTHEADERS += xf86dri.h EXTSOURCES += xf86dri.c -EXTENSION_XML += xf86dri.xml if BUILD_XFREE86_DRI lib_LTLIBRARIES += libxcb-xf86dri.la libxcb_xf86dri_la_LDFLAGS = -version-info 0:0:0 -no-undefined @@ -180,9 +144,7 @@ libxcb_xf86dri_la_LIBADD = $(XCB_LIBS) nodist_libxcb_xf86dri_la_SOURCES = xf86dri.c xf86dri.h endif -EXTHEADERS += xfixes.h EXTSOURCES += xfixes.c -EXTENSION_XML += xfixes.xml if BUILD_XFIXES lib_LTLIBRARIES += libxcb-xfixes.la libxcb_xfixes_la_LDFLAGS = -version-info 0:0:0 -no-undefined @@ -190,9 +152,7 @@ libxcb_xfixes_la_LIBADD = $(XCB_LIBS) nodist_libxcb_xfixes_la_SOURCES = xfixes.c xfixes.h endif -EXTHEADERS += xinerama.h EXTSOURCES += xinerama.c -EXTENSION_XML += xinerama.xml if BUILD_XINERAMA lib_LTLIBRARIES += libxcb-xinerama.la libxcb_xinerama_la_LDFLAGS = -version-info 0:0:0 -no-undefined @@ -200,9 +160,7 @@ libxcb_xinerama_la_LIBADD = $(XCB_LIBS) nodist_libxcb_xinerama_la_SOURCES = xinerama.c xinerama.h endif -EXTHEADERS += xinput.h EXTSOURCES += xinput.c -EXTENSION_XML += xinput.xml if BUILD_XINPUT lib_LTLIBRARIES += libxcb-xinput.la libxcb_xinput_la_LDFLAGS = -version-info 0:0:0 -no-undefined @@ -210,9 +168,7 @@ libxcb_xinput_la_LIBADD = $(XCB_LIBS) nodist_libxcb_xinput_la_SOURCES = xinput.c xinput.h endif -EXTHEADERS += xprint.h EXTSOURCES += xprint.c -EXTENSION_XML += xprint.xml if BUILD_XPRINT lib_LTLIBRARIES += libxcb-xprint.la libxcb_xprint_la_LDFLAGS = -version-info 0:0:0 -no-undefined @@ -220,9 +176,7 @@ libxcb_xprint_la_LIBADD = $(XCB_LIBS) nodist_libxcb_xprint_la_SOURCES = xprint.c xprint.h endif -EXTHEADERS += xselinux.h EXTSOURCES += xselinux.c -EXTENSION_XML += xselinux.xml if BUILD_SELINUX lib_LTLIBRARIES += libxcb-xselinux.la libxcb_xselinux_la_LDFLAGS = -version-info 0:0:0 -no-undefined @@ -230,9 +184,7 @@ libxcb_xselinux_la_LIBADD = $(XCB_LIBS) nodist_libxcb_xselinux_la_SOURCES = xselinux.c xselinux.h endif -EXTHEADERS += xtest.h EXTSOURCES += xtest.c -EXTENSION_XML += xtest.xml if BUILD_XTEST lib_LTLIBRARIES += libxcb-xtest.la libxcb_xtest_la_LDFLAGS = -version-info 0:0:0 -no-undefined @@ -240,9 +192,7 @@ libxcb_xtest_la_LIBADD = $(XCB_LIBS) nodist_libxcb_xtest_la_SOURCES = xtest.c xtest.h endif -EXTHEADERS += xv.h EXTSOURCES += xv.c -EXTENSION_XML += xv.xml if BUILD_XV lib_LTLIBRARIES += libxcb-xv.la libxcb_xv_la_LDFLAGS = -version-info 0:0:0 -no-undefined @@ -250,9 +200,7 @@ libxcb_xv_la_LIBADD = $(XCB_LIBS) nodist_libxcb_xv_la_SOURCES = xv.c xv.h endif -EXTHEADERS += xvmc.h EXTSOURCES += xvmc.c -EXTENSION_XML += xvmc.xml if BUILD_XVMC lib_LTLIBRARIES += libxcb-xvmc.la libxcb_xvmc_la_LDFLAGS = -version-info 0:0:0 -no-undefined @@ -261,23 +209,13 @@ nodist_libxcb_xvmc_la_SOURCES = xvmc.c xvmc.h endif - +EXTHEADERS=$(EXTSOURCES:.c=.h) xcbinclude_HEADERS = xcb.h xcbext.h nodist_xcbinclude_HEADERS = $(EXTHEADERS) noinst_HEADERS = xcbint.h -BUILT_SOURCES = $(EXTSOURCES) $(EXTHEADERS) -CLEANFILES = $(EXTSOURCES) $(EXTHEADERS) $(EXTENSION_XML) - -$(EXTHEADERS) $(EXTSOURCES): c_client.py - -SUFFIXES = .xml - -.xml.h: - $(PYTHON) $(srcdir)/c_client.py -p $(XCBPROTO_XCBPYTHONDIR) $(XCBPROTO_XCBINCLUDEDIR)/$< - -.xml.c: - $(PYTHON) $(srcdir)/c_client.py -p $(XCBPROTO_XCBPYTHONDIR) $(XCBPROTO_XCBINCLUDEDIR)/$< +BUILT_SOURCES = $(EXTSOURCES) +CLEANFILES = $(EXTSOURCES) $(EXTHEADERS) -$(EXTENSION_XML): - $(LN_S) -f $(XCBPROTO_XCBINCLUDEDIR)/$@ $@ +$(EXTSOURCES): c_client.py + $(PYTHON) $(srcdir)/c_client.py -p $(XCBPROTO_XCBPYTHONDIR) $(XCBPROTO_XCBINCLUDEDIR)/$(@:.c=.xml) diff --git a/libxcb/src/c-client.xsl b/libxcb/src/c-client.xsl new file mode 100644 index 000000000..a15d824a1 --- /dev/null +++ b/libxcb/src/c-client.xsl @@ -0,0 +1,1551 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { "" } + + + + + + + + + + xcb + + _ + + + + + + + + + + + + + _ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + char + + + + + + + + + + + + + + + + + + + + + + + + + + + + _ + + + + + + + + + + + _ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multiple definitions of type " + + " found. + + + + + + + + + + + + No definitions of type " + + " found + + , and it is not a known core type + + . + + + + + + + + + + + + + + + + xcb_void + + + _cookie_t + + + + + + + + + _checked + _unchecked + + + + + + + /** + * Delivers a request to the X server + * @param c The connection + * @return A cookie + * + * Delivers a request to the X server. + * + + * This form can be used only if the request will not cause + * a reply to be generated. Any returned error will be + * saved for handling by xcb_request_check(). + + + * This form can be used only if the request will cause + * a reply to be generated. Any returned error will be + * placed in the event queue. + + */ + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /** + * Return the reply + * @param c The connection + * @param cookie The cookie + * @param e The xcb_generic_error_t supplied + * + * Returns the reply of the request asked by + * + * The parameter @p e supplied to this function must be NULL if + * _unchecked(). is used. + * Otherwise, it stores the error if any. + * + * The returned value must be freed by the caller using free(). + */ + + + + + + + + return (_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e); + + + + + + + + + + + + + + union + + + + + + + + + + + + _event_t + + + _error_t + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + _t + + + + + + _t + + + + + + + + + + + + + + + + + + + + + + + + + + + _t + + + + + + + + + + + _t + + + + + + true + + + + + + + + + + + + + + + length + 2 + + + + + + + + + Encountered a list with no length expresssion outside a request or reply. + + + + + + + + + + + + + + _t + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + _t + + + + + + + + + + + + + + + + + + const + + + _t + + * + + + + + + + + + + + + + + _t + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Unions must be fixed length. + + + + + + + + + + + + + + + + + + + + + + + static const xcb_protocol_request_t xcb_req = { + + /* count */ , + /* ext */ + + & + + _id + + 0 + , + /* opcode */ , + /* isvoid */ + + }; + + + struct iovec xcb_parts[]; + xcb_ret; + xcb_out; + + + + xcb_out.pad0 = 0; + + + + + xcb_parts[2].iov_base = (char *) &xcb_out; + xcb_parts[2].iov_len = sizeof(xcb_out); + xcb_parts[3].iov_base = 0; + xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3; + + + xcb_parts[].iov_base = (char *) ; + xcb_parts[].iov_len = + + * sizeof( + + + char + + + + + + ) + ; + xcb_parts[].iov_base = 0; + xcb_parts[].iov_len = -xcb_parts[].iov_len & 3; + + + xcb_ret.sequence = xcb_send_request(c, + XCB_REQUEST_CHECKED + 0 + , xcb_parts + 2, &xcb_req); + return xcb_ret; + + + + + xcb_out. + + = + + ; + + + + + + xcb_out. + + = + + ; + + + + + + + xcb_out.pad = 0; + memset(xcb_out.pad, 0, ); + + + + + + + + + + + + + + + + + R + 1 + + + + _end(__iterator(R)) + + + __end(R) + + + + + + + + + + + + + + + + + return ( *) (); + + + xcb_generic_iterator_t prev = ; + return ( *) ((char *) prev.data + XCB_TYPE_PAD(, prev.index)); + + + + + + + return + + ; + + + + + + _iterator_t i; + + + i.data = ( *) (); + + + xcb_generic_iterator_t prev = ; + i.data = ( *) ((char *) prev.data + XCB_TYPE_PAD(, prev.index)); + + + i.rem = + + ; + i.index = (char *) i.data - (char *) R; + return i; + + + + + + char + + + + + + xcb_generic_iterator_t i; + + + i.data = (( *) ()) + ( + + ); + + + xcb_generic_iterator_t child = ; + i.data = (( *) child.data) + ( + + ); + + + i.rem = 0; + i.index = (char *) i.data - (char *) R; + return i; + + + + + + + /** + * Get the next element of the iterator + * @param i Pointer to a _iterator_t + * + * Get the next element in the iterator. The member rem is + * decreased by one. The member data points to the next + * element. The member index is increased by sizeof(_t) + */ + + + + _t *R = i->data; + xcb_generic_iterator_t child = ; + --i->rem; + i->data = (_t *) child.data; + i->index = child.index; + + + --i->rem; + ++i->data; + i->index += sizeof(_t); + + + + + /** + * Return the iterator pointing to the last element + * @param i An _iterator_t + * @return The iterator pointing to the last element + * + * Set the current element in the iterator to the last element. + * The member rem is set to 0. The member data points to the + * last element. + */ + + xcb_generic_iterator_t ret; + + + while(i.rem > 0) + + _next(&i); + + ret.data = i.data; + ret.rem = i.rem; + ret.index = i.index; + + + ret.data = i.data + i.rem; + ret.index = i.index + ((char *) ret.data - (char *) i.data); + ret.rem = 0; + + + return ret; + + + + + + + + Error: This stylesheet requires the EXSL node-set extension. + + + + Error: Parameter "mode" must be "header" or "source". + + + + + + + ___H + +/* + * This file generated automatically from +.xml by c-client.xsl using XSLT. + * Edit at your peril. + */ + + +/** + * @defgroup XCB__API XCB API + * @brief XCB Protocol Implementation. + + * @{ + **/ + + + +#ifndef +#define + +#include "xcb.h" + +#include ".h" + + + + + + + + + #define XCB__MAJOR_VERSION + + #define XCB__MINOR_VERSION + + + + + + + + + +#include <string.h> + +#include <assert.h> +#include "xcbext.h" +#include ".h" + + + + + + + +#endif + +/** + * @} + */ + + + + + + + + + /** Opcode for . */ + + #define + + + + + + + + + + + extern + + const char + + [] + + = " + + " + + ; + + + + + + extern + + + + = + + + ; + + + + + + + + + typedef + + + + ; + + + + + + + + + + + + + /** + * @brief + **/ + + typedef + struct + + + { + + + + + + + ; /**< */ + + + } + + ; + + + + + + + + typedef enum + + { + + + , + + + + + + + = + + + + + + + +} ; + + + + + + + + + + + + + + + + + +/***************************************************************************** + ** + ** + + + ** + + + + + ** @param + + + + + + + + ** @returns + ** + *****************************************************************************/ + + + + + + + + , + + + + + + + + + + + + /**< */ + + + + + ) + + ; + + + + + +{ + + + + + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ( + + + + + + + + + + ) + + + + (1 << + + ) + + + + + + ( + + + + + + + + + + + ) + + + + + + Invalid element in expression: + + + + + + + + + + + + + + + + + [ + + ] + + + + + + + + + + + pad + + + + + + [ + + ] + + + + + + + + + 0 + 0 + + + + + + + + + + + + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + diff --git a/libxcb/src/xcb.h b/libxcb/src/xcb.h index f95127665..35d876883 100644 --- a/libxcb/src/xcb.h +++ b/libxcb/src/xcb.h @@ -285,6 +285,22 @@ xcb_generic_event_t *xcb_poll_for_event(xcb_connection_t *c); */ xcb_generic_error_t *xcb_request_check(xcb_connection_t *c, xcb_void_cookie_t cookie); +/** + * @brief Discards the reply for a request. + * @param c: The connection to the X server. + * @param sequence: The request sequence number from a cookie. + * + * Discards the reply for a request. Additionally, any error generated + * by the request is also discarded (unless it was an _unchecked request + * and the error has already arrived). + * + * This function will not block even if the reply is not yet available. + * + * Note that the sequence really does have to come from an xcb cookie; + * this function is not designed to operate on socket-handoff replies. + */ +void xcb_discard_reply(xcb_connection_t *c, unsigned int sequence); + /* xcb_ext.c */ diff --git a/libxcb/src/xcb_auth.c b/libxcb/src/xcb_auth.c index 104f2f07b..00aad23c5 100644 --- a/libxcb/src/xcb_auth.c +++ b/libxcb/src/xcb_auth.c @@ -260,10 +260,10 @@ int _xcb_get_auth_info(int fd, xcb_auth_info_t *info, int display) * case anyway.*/ if (getpeername(fd, sockname, &socknamelen) == -1) { - if (sockname->sa_family != AF_UNIX) - return 0; /* except for AF_UNIX, sockets should have peernames */ if (getsockname(fd, sockname, &socknamelen) == -1) return 0; /* can only authenticate sockets */ + if (sockname->sa_family != AF_UNIX) + return 0; /* except for AF_UNIX, sockets should have peernames */ gotsockname = 1; } diff --git a/libxcb/src/xcb_conn.c b/libxcb/src/xcb_conn.c index 251d62e01..ed2153d27 100644 --- a/libxcb/src/xcb_conn.c +++ b/libxcb/src/xcb_conn.c @@ -211,8 +211,10 @@ xcb_connection_t *xcb_connect_to_fd(int fd, xcb_auth_info_t *auth_info) xcb_connection_t* c; c = calloc(1, sizeof(xcb_connection_t)); - if(!c) + if(!c) { + close(fd); return (xcb_connection_t *) &error_connection; + } c->fd = fd; diff --git a/libxcb/src/xcb_in.c b/libxcb/src/xcb_in.c index 26ab3581f..80f55232e 100644 --- a/libxcb/src/xcb_in.c +++ b/libxcb/src/xcb_in.c @@ -409,6 +409,116 @@ void *xcb_wait_for_reply(xcb_connection_t *c, unsigned int request, xcb_generic_ return ret; } +static void insert_pending_discard(xcb_connection_t *c, pending_reply **prev_next, uint64_t seq) +{ + pending_reply *pend; + pend = malloc(sizeof(*pend)); + if(!pend) + { + _xcb_conn_shutdown(c); + return; + } + + pend->first_request = seq; + pend->last_request = seq; + pend->workaround = 0; + pend->flags = XCB_REQUEST_DISCARD_REPLY; + pend->next = *prev_next; + *prev_next = pend; + + if(!pend->next) + c->in.pending_replies_tail = &pend->next; +} + +static void discard_reply(xcb_connection_t *c, unsigned int request) +{ + pending_reply *pend = 0; + pending_reply **prev_pend; + uint64_t widened_request; + + /* We've read requests past the one we want, so if it has replies we have + * them all and they're in the replies map. */ + if(XCB_SEQUENCE_COMPARE_32(request, <, c->in.request_read)) + { + struct reply_list *head; + head = _xcb_map_remove(c->in.replies, request); + while (head) + { + struct reply_list *next = head->next; + free(head->reply); + free(head); + head = next; + } + return; + } + + /* We're currently processing the responses to the request we want, and we + * have a reply ready to return. Free it, and mark the pend to free any further + * replies. */ + if(XCB_SEQUENCE_COMPARE_32(request, ==, c->in.request_read) && c->in.current_reply) + { + struct reply_list *head; + head = c->in.current_reply; + c->in.current_reply = NULL; + c->in.current_reply_tail = &c->in.current_reply; + while (head) + { + struct reply_list *next = head->next; + free(head->reply); + free(head); + head = next; + } + + pend = c->in.pending_replies; + if(pend && + !(XCB_SEQUENCE_COMPARE(pend->first_request, <=, c->in.request_read) && + (pend->workaround == WORKAROUND_EXTERNAL_SOCKET_OWNER || + XCB_SEQUENCE_COMPARE(c->in.request_read, <=, pend->last_request)))) + pend = 0; + if(pend) + pend->flags |= XCB_REQUEST_DISCARD_REPLY; + else + insert_pending_discard(c, &c->in.pending_replies, c->in.request_read); + + return; + } + + /* Walk the list of pending requests. Mark the first match for deletion. */ + for(prev_pend = &c->in.pending_replies; *prev_pend; prev_pend = &(*prev_pend)->next) + { + if(XCB_SEQUENCE_COMPARE_32((*prev_pend)->first_request, >, request)) + break; + + if(XCB_SEQUENCE_COMPARE_32((*prev_pend)->first_request, ==, request)) + { + /* Pending reply found. Mark for discard: */ + (*prev_pend)->flags |= XCB_REQUEST_DISCARD_REPLY; + return; + } + } + + /* Pending reply not found (likely due to _unchecked request). Create one: */ + widened_request = (c->out.request & UINT64_C(0xffffffff00000000)) | request; + if(widened_request > c->out.request) + widened_request -= UINT64_C(1) << 32; + + insert_pending_discard(c, prev_pend, widened_request); +} + +void xcb_discard_reply(xcb_connection_t *c, unsigned int sequence) +{ + if(c->has_error) + return; + + /* If an error occurred when issuing the request, fail immediately. */ + if(!sequence) + return; + + pthread_mutex_lock(&c->iolock); + discard_reply(c, sequence); + pthread_mutex_unlock(&c->iolock); +} + int xcb_poll_for_reply(xcb_connection_t *c, unsigned int request, void **reply, xcb_generic_error_t **error) { int ret; diff --git a/libxcb/src/xcb_util.c b/libxcb/src/xcb_util.c index c3cbfa6c1..996ff2518 100644 --- a/libxcb/src/xcb_util.c +++ b/libxcb/src/xcb_util.c @@ -41,6 +41,7 @@ #include #include #include +#include #include #include "xcb.h" @@ -177,6 +178,22 @@ static int _xcb_open(char *host, char *protocol, const int display) return _xcb_open_unix(protocol, file); } +static int _xcb_socket(int family, int type, int proto) +{ + int fd; + +#ifdef SOCK_CLOEXEC + fd = socket(family, type | SOCK_CLOEXEC, proto); + if (fd == -1 && errno == EINVAL) +#endif + { + fd = socket(family, type, proto); + if (fd >= 0) + fcntl(fd, F_SETFD, FD_CLOEXEC); + } + return fd; +} + #ifdef DNETCONN static int _xcb_open_decnet(const char *host, const char *protocol, const unsigned short port) { @@ -199,7 +216,7 @@ static int _xcb_open_decnet(const char *host, const char *protocol, const unsign return -1; addr.sdn_objnum = 0; - fd = socket(PF_DECnet, SOCK_STREAM, 0); + fd = _xcb_socket(PF_DECnet, SOCK_STREAM, 0); if(fd == -1) return -1; @@ -256,7 +273,7 @@ static int _xcb_open_tcp(char *host, char *protocol, const unsigned short port) for(addr = results; addr; addr = addr->ai_next) { - fd = socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol); + fd = _xcb_socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol); if(fd >= 0) { int on = 1; setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on)); @@ -285,7 +302,7 @@ static int _xcb_open_unix(char *protocol, const char *file) #ifdef HAVE_SOCKADDR_SUN_LEN addr.sun_len = SUN_LEN(&addr); #endif - fd = socket(AF_UNIX, SOCK_STREAM, 0); + fd = _xcb_socket(AF_UNIX, SOCK_STREAM, 0); if(fd == -1) return -1; if(connect(fd, (struct sockaddr *) &addr, sizeof(addr)) == -1) { @@ -311,7 +328,7 @@ static int _xcb_open_abstract(char *protocol, const char *file, size_t filelen) #ifdef HAVE_SOCKADDR_SUN_LEN addr.sun_len = 1 + filelen; #endif - fd = socket(AF_UNIX, SOCK_STREAM, 0); + fd = _xcb_socket(AF_UNIX, SOCK_STREAM, 0); if (fd == -1) return -1; if (connect(fd, (struct sockaddr *) &addr, namelen) == -1) { diff --git a/libxcb/xcb-proto/autogen.sh b/libxcb/xcb-proto/autogen.sh new file mode 100644 index 000000000..904cd6746 --- /dev/null +++ b/libxcb/xcb-proto/autogen.sh @@ -0,0 +1,12 @@ +#! /bin/sh + +srcdir=`dirname $0` +test -z "$srcdir" && srcdir=. + +ORIGDIR=`pwd` +cd $srcdir + +autoreconf -v --install || exit 1 +cd $ORIGDIR || exit $? + +$srcdir/configure --enable-maintainer-mode "$@" diff --git a/libxcb/xcb-proto/doc/xml-xcb.txt b/libxcb/xcb-proto/doc/xml-xcb.txt index feb99844f..3c6a15519 100644 --- a/libxcb/xcb-proto/doc/xml-xcb.txt +++ b/libxcb/xcb-proto/doc/xml-xcb.txt @@ -225,8 +225,17 @@ enum; the value is restricted to one of the constants named in the enum. defining the set of values included, and a list containing these values. value-mask-type gives the type of the bitmask; this must be CARD16 or CARD32. value-mask-name gives the field name of the bitmask, and - value-list-name gives the field name of the list of values. + value-list-name gives the field name of the list of values. Please use + instead for new protocol definitions. + switch expression + bitcase expression, fields + + This element represents conditional inclusion of fields. It can be viewed + as sequence of multiple ifs: if ( switch expression & bitcase expression ) + is equal to bitcase expression, bitcase fields are included in structure. + It can be used only as the last field of structure. New protocol definitions + should prefer to use this instead of . Expressions ----------- @@ -256,3 +265,22 @@ Expressions The bit element represents a literal bitmask value in an expression. The integer must be in the range 0..31, expanding to (1<enum item identifier + + This element represents a reference to item of enum. + +expression + + This element represents a unary operator, with the op attribute specifying + which operator. The only supported operation so far is ~, and its semantic + is identical to the corresponding operator in C. + + + + This element represents a sumation of the elements of the referenced list. + +expression + + This element represents the number of bits set in the expression. + diff --git a/libxcb/xcb-proto/src/Makefile.am b/libxcb/xcb-proto/src/Makefile.am index 0f0dfbcda..e1e2743be 100644 --- a/libxcb/xcb-proto/src/Makefile.am +++ b/libxcb/xcb-proto/src/Makefile.am @@ -21,6 +21,7 @@ xcbinclude_HEADERS = \ xfixes.xml \ xinerama.xml \ xinput.xml \ + xkb.xml \ xprint.xml \ xselinux.xml \ xtest.xml \ diff --git a/libxcb/xcb-proto/src/ge.xml b/libxcb/xcb-proto/src/ge.xml new file mode 100644 index 000000000..3a6210d97 --- /dev/null +++ b/libxcb/xcb-proto/src/ge.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + diff --git a/libxcb/xcb-proto/src/import.py b/libxcb/xcb-proto/src/import.py new file mode 100644 index 000000000..eb58f5561 --- /dev/null +++ b/libxcb/xcb-proto/src/import.py @@ -0,0 +1,66 @@ +#!/usr/bin/python + +from xml.sax.saxutils import XMLFilterBase, XMLGenerator +from xml.sax import make_parser +import sys, os + +path = [os.path.curdir, 'extensions'] +def find_file_on_path(name): + for d in path: + test = os.path.join(d, name) + if os.path.isfile(test): + return test + raise OSError(errno.ENOENT, os.strerror(errno.ENOENT), name) + +seen = {} + +class ProcessImports(XMLFilterBase): + def setContentHandler(self, handler): + self.handler = handler + XMLFilterBase.setContentHandler(self, handler) + + def ensure(self, name): + if not seen.has_key(name): + child = ProcessImports(make_parser()) + child.setContentHandler(self.handler) + child.parse(find_file_on_path(name + '.xml')) + + def startDocument(self): + pass + def endDocument(self): + pass + + inimport = None + + def startElement(self, name, attrs): + assert self.inimport is None + if name == 'import': + self.inimport = "" + return + XMLFilterBase.startElement(self, name, attrs) + if name == 'xcb': + seen[attrs['header']] = True + self.ensure('xproto') + + def characters(self, content): + if self.inimport is not None: + self.inimport += content + else: + XMLFilterBase.characters(self, content) + + def endElement(self, name): + if name == 'import': + self.ensure(self.inimport) + self.inimport = None + return + XMLFilterBase.endElement(self, name) + +out = XMLGenerator() +importer = ProcessImports(make_parser()) +importer.setContentHandler(out) +out.startDocument() +if len(sys.argv) > 1: + importer.parse(sys.argv[1]) +else: + importer.parse(sys.stdin) +out.endDocument() diff --git a/libxcb/xcb-proto/src/size.py b/libxcb/xcb-proto/src/size.py new file mode 100644 index 000000000..5ead8b238 --- /dev/null +++ b/libxcb/xcb-proto/src/size.py @@ -0,0 +1,76 @@ +#!/usr/bin/python + +from xml.sax.saxutils import XMLFilterBase, XMLGenerator +from xml.sax.xmlreader import AttributesImpl +from xml.sax import make_parser +import sys + +def AttributesUnion(base, **values): + baseitems = dict(base) + baseitems.update(values) + return AttributesImpl(baseitems) + +class AnnotateSize(XMLFilterBase): + types = { + 'BYTE': 1, 'BOOL': 1, + 'CARD8': 1, 'CARD16': 2, 'CARD32': 4, + 'INT8': 1, 'INT16': 2, 'INT32': 4, + 'char': 1, 'void': 1, + 'float': 4, 'double': 8, + 'XID': 4, + } + header = [] + def setTypeSize(self, name, size): + assert not self.types.has_key(name), "size of " + name + " declared as both " + str(size) + " and " + str(self.types[name]) + self.types[name] = size + + struct = None + union = None + def startElement(self, name, attrs): + if name == 'xcb': + self.header.insert(0, attrs['header']) + elif name == 'field': + size = self.types.get(attrs['type'], 0) + if self.struct is not None: + self.totalsize += size + elif self.union is not None: + self.totalsize = max(self.totalsize, size) + attrs = AttributesUnion(attrs, bytes=str(size)) + elif name == 'pad': + assert self.union is None + if self.struct is not None: + self.totalsize += int(attrs['bytes']) + elif name == 'xidtype': + self.setTypeSize(attrs['name'], 4) + elif name == 'typedef': + self.setTypeSize(attrs['newname'], self.types[attrs['oldname']]) + elif name == 'struct' or name == 'union': + assert self.struct is None and self.union is None + setattr(self, name, attrs['name']) + self.totalsize = 0 + + if len(self.header) == 1 or name == 'xcb': + XMLFilterBase.startElement(self, name, attrs) + + def characters(self, content): + if len(self.header) == 1: + XMLFilterBase.characters(self, content) + + def endElement(self, name): + if len(self.header) == 1 or name == 'xcb': + XMLFilterBase.endElement(self, name) + + if name == 'xcb': + self.header.pop(0) + elif name == 'struct' or name == 'union': + assert getattr(self, name) is not None + self.setTypeSize(getattr(self, name), self.totalsize) + setattr(self, name, None) + del self.totalsize + +annotator = AnnotateSize(make_parser()) +annotator.setContentHandler(XMLGenerator()) +if len(sys.argv) > 1: + annotator.parse(sys.argv[1]) +else: + annotator.parse(sys.stdin) diff --git a/libxcb/xcb-proto/src/type.py b/libxcb/xcb-proto/src/type.py new file mode 100644 index 000000000..83382325d --- /dev/null +++ b/libxcb/xcb-proto/src/type.py @@ -0,0 +1,74 @@ +#!/usr/bin/python + +from xml.sax.saxutils import XMLFilterBase, XMLGenerator +from xml.sax.xmlreader import AttributesImpl +from xml.sax import make_parser +import sys + +def AttributesUnion(base, **values): + baseitems = dict(base) + baseitems.update(values) + return AttributesImpl(baseitems) + +class AnnotateType(XMLFilterBase): + scopes = [] + map = dict([(name, [name]) for name in [ + 'BOOL', 'BYTE', + 'CARD8', 'CARD16', 'CARD32', + 'INT8', 'INT16', 'INT32', + 'char', 'void', + 'float', 'double', + 'XID', + ]]) + def startScope(self, name): + self.scopes.insert(0, name) + def declareType(self, name): + assert ':' not in name + qname = self.scopes[0] + ':' + name + self.map.setdefault(name, []).insert(0, qname) + def getQualifiedType(self, name): + if ':' in name: + return name + names = self.map.get(name, []) + return names[0] + def endScope(self): + self.scopes.pop(0) + + def startElement(self, name, attrs): + attnames = [] + if name == 'xcb': + self.startScope(attrs['header']) + elif name in ['struct', 'union', 'xidtype', 'enum', 'event', 'eventcopy', 'error', 'errorcopy']: + self.declareType(attrs['name']) + attnames = ['name'] + if name.endswith('copy'): + attnames.append('ref') + elif name == 'typedef': + self.declareType(attrs['newname']) + attnames = ['oldname', 'newname'] + elif name == 'valueparam': + attnames = ['value-mask-type'] + elif attrs.has_key('type'): + attnames = ['type'] + newattrs = {} + for attname in attnames: + newattrs[attname] = self.getQualifiedType(attrs[attname]) + if newattrs: + attrs = AttributesUnion(attrs, **newattrs) + XMLFilterBase.startElement(self, name, attrs) + + def endElement(self, name): + XMLFilterBase.endElement(self, name) + if name == 'xcb': + self.endScope() + +annotator = AnnotateType(make_parser()) +annotator.setContentHandler(XMLGenerator()) +if len(sys.argv) > 1: + annotator.parse(sys.argv[1]) +else: + annotator.parse(sys.stdin) + +for name,names in annotator.map.iteritems(): + if len(names) != 1: + print "" diff --git a/libxcb/xcb-proto/src/xcb.xsd b/libxcb/xcb-proto/src/xcb.xsd index f3fcb6fe2..5169b4809 100644 --- a/libxcb/xcb-proto/src/xcb.xsd +++ b/libxcb/xcb-proto/src/xcb.xsd @@ -55,6 +55,36 @@ authorization from the authors. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -89,7 +119,40 @@ authorization from the authors. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -126,7 +189,12 @@ authorization from the authors. - + + + + + + @@ -166,12 +234,20 @@ authorization from the authors. + + + - - - - + + + + + + + + + diff --git a/libxcb/xcb-proto/src/xf86vidmode.xml b/libxcb/xcb-proto/src/xf86vidmode.xml new file mode 100644 index 000000000..718240cd5 --- /dev/null +++ b/libxcb/xcb-proto/src/xf86vidmode.xml @@ -0,0 +1,464 @@ + + + + + + + + + + + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + + + + 0 + + + + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + privsize + + + + + + + + + + + + + + + + + + + + + privsize + + + + + + + + + + + + + + + + + + + + num_hsync + + + num_vsync + + + vendor_length + + + + + + vendor_length + 3 + + 0xFFFFFFFC + + vendor_length + + + + model_length + + + + + + + + + + + + + + + + + + modecount + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + privsize + + + + + + + + + + + + + + + + + + + + + privsize + + + + + + + + + + + + + + + + + + + + + privsize + + + + + + + + + + + + + + + + + + + + + + + + + + privsize + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + flags + 1 + + + clocks + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + size + 1 + + 0xFFFFFFFE + + + + + + size + 1 + + 0xFFFFFFFE + + + + + + size + 1 + + 0xFFFFFFFE + + + + + + + + + + + + size + 1 + + 0xFFFFFFFE + + + + + + size + 1 + + 0xFFFFFFFE + + + + + + size + 1 + + 0xFFFFFFFE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libxcb/xcb-proto/src/xkb.xml b/libxcb/xcb-proto/src/xkb.xml new file mode 100644 index 000000000..fb97ba408 --- /dev/null +++ b/libxcb/xcb-proto/src/xkb.xml @@ -0,0 +1,2759 @@ + + + + + xproto + + + + 255 + + 32 + + + 4 + + + + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + + + + 0 + 1 + 2 + + + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + + + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + + + + 0 + 1 + + + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + + + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + + + + + 27 + 28 + 29 + 30 + 31 + + + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + + + + 6 + 7 + + + + + + + + + + + 0 + 4 + + + + 768 + 1280 + + + + + 0 + 5 + + + + 768 + + + + + 256 + 512 + 768 + 1024 + 1280 + 1536 + 65280 + + + + + 0 + 1 + 2 + 3 + + + + 254 + 255 + + + + 0 + 1 + 2 + 3 + + + + 7 + + + + 0 + 6 + 7 + + + + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0 + + + + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0 + + + + 15 + 14 + 13 + 12 + 11 + 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0 + + + + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0 + + + + 0 + 1 + 2 + 3 + 4 + + + + 7 + 127 + + + + 7 + 6 + 5 + + + + 4 + 3 + 2 + 1 + 0 + + + + 4 + 3 + 2 + 1 + 0 + + + + + + + + + + + + + + + 0 + 1 + + + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + + + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + + + + 0 + 1 + 2 + 3 + 4 + + + + 0 + 1 + 2 + 3 + 4 + + + + + + + + + + + 4 + + + + + + 4 + + + 4 + + + + + + + length + + + + + + + length + + + + + + + + + + + + + + + + + + + + + + + nMapEntries + + + + hasPreserve + nMapEntries + + + + + + + 4 + + + + + + nSyms + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 1 + 2 + 3 + 4 + 129 + 130 + 131 + 132 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + nMapEntries + + + + preserve + nMapEntries + + + + + + + + + + nameLength + + + + valueLength + + + + + + + + + nPoints + + + + + + + + + + + nOutlines + + + + + + 4 + + + + + + + + + 4 + + + 4 + + + + + + + + + nKeys + + + + + + + + + nRows + + + + + + + + + + + nKeys + + + + + 1 + 2 + 3 + 4 + 5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + nRows + + + nDoodads + + + nOverlays + + + + + + + + length + + + + + + + + + + + + + namesPresent + + + + + mapsPresent + + + + + + + + 255 + 254 + 253 + + + + + + + + + + + + + 0 + 1 + 2 + 2 + + + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 1 + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + + + + + + + + + 0 + 1 + 2 + 2 + 3 + + + + 3 + 4 + 5 + 6 + + + + + + + + + + + + + + + + + + + + 0 + 2 + + + + + + + + + + + 0 + 1 + 2 + 3 + 4 + + + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + + + + + + + + + + + + + + 0 + 1 + 2 + + + + + + + 6 + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 1 + + + + + + + + + + + + 0 + 1 + 2 + 3 + 4 + 5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + affectWhich + + clear + selectAll + + + + NewKeyboardNotify + + + + + StateNotify + + + + + ControlsNotify + + + + + IndicatorStateNotify + + + + + IndicatorMapNotify + + + + + NamesNotify + + + + + CompatMapNotify + + + + + BellNotify + + + + + ActionMessage + + + + + AccessXNotify + + + + + ExtensionDeviceNotify + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 32 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 32 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + present + + KeyTypes + + nTypes + + + + KeySyms + + nKeySyms + + + + KeyActions + + nKeyActions + + + totalActions + + + + KeyBehaviors + + totalKeyBehaviors + + + + VirtualMods + + nVModMapKeys + + + + ExplicitComponents + + totalKeyExplicit + + + + ModifierMap + + totalModMapKeys + + + + VirtualModMap + + totalVModMapKeys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + present + + KeyTypes + + nTypes + + + + KeySyms + + nKeySyms + + + + KeyActions + + nKeyActions + + + totalActions + + + + KeyBehaviors + + totalKeyBehaviors + + + + VirtualMods + + nVModMapKeys + + + + ExplicitComponents + + totalKeyExplicit + + + + ModifierMap + + totalModMapKeys + + + + VirtualModMap + + totalVModMapKeys + + + + + + + + + + + + + + + + + + + + + + 16 + nSIRtrn + + + + + groupsRtrn + + + + + + + + + + + + + + + + + 16 + nSI + + + + + groups + + + + + + + + + + + + + + + + + + + + + + + + + + nIndicators + + + + + + + + + + + which + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + which + + Keycodes + + + + Geometry + + + + Symbols + + + + PhysSymbols + + + + Types + + + + Compat + + + + KeyTypeNames + + nTypes + + + + KTLevelNames + + nKTLevels + + + + + + + IndicatorNames + + + indicators + + + + + VirtualModNames + + + virtualMods + + + + + GroupNames + + + groupNames + + + + + KeyNames + + nKeys + + + + KeyAliases + + nKeyAliases + + + + RGNames + + nRadioGroups + + + + + + + + + + + + + + + + + + + + + + + + which + + Keycodes + + + + Geometry + + + + Symbols + + + + PhysSymbols + + + + Types + + + + Compat + + + + KeyTypeNames + + nTypes + + + + KTLevelNames + + nKTLevels + + + + + + + IndicatorNames + + + indicators + + + + + VirtualModNames + + + virtualMods + + + + + GroupNames + + + groupNames + + + + + KeyNames + + nKeys + + + + KeyAliases + + nKeyAliases + + + + RGNames + + nRadioGroups + + + + + + + + + + + + + + + + + + + + + + + + + + + nProperties + + + nColors + + + nShapes + + + nSections + + + nDoodads + + + nKeyAliases + + + + + + + + + + + + + + + + + + + + + nProperties + + + nColors + + + nShapes + + + nSections + + + nDoodads + + + nKeyAliases + + + + + + + + + + + + + + + + + + + + + + + + + + + keymapsSpecLen + + + + keycodesSpecLen + + + + typesSpecLen + + + + compatMapSpecLen + + + + symbolsSpecLen + + + + geometrySpecLen + + + + + + + + + + + + + nKeymaps + + + nKeycodes + + + nTypes + + + nCompatMaps + + + nSymbols + + + nGeometries + + + + + + + + + + + + + keymapsSpecLen + + + + keycodesSpecLen + + + + typesSpecLen + + + + compatMapSpecLen + + + + symbolsSpecLen + + + + geometrySpecLen + + + + + + + + + + + + reported + + Types + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + present + + KeyTypes + + nTypes + + + + KeySyms + + nKeySyms + + + + KeyActions + + nKeyActions + + + totalActions + + + + KeyBehaviors + + totalKeyBehaviors + + + + VirtualMods + + nVModMapKeys + + + + ExplicitComponents + + totalKeyExplicit + + + + ModifierMap + + totalModMapKeys + + + + VirtualModMap + + totalVModMapKeys + + + + + + CompatMap + + + + + + + + + + 16 + nSIRtrn + + + + + groupsRtrn + + + + + ClientSymbols + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + present + + KeyTypes + + nTypes + + + + KeySyms + + nKeySyms + + + + KeyActions + + nKeyActions + + + totalActions + + + + KeyBehaviors + + totalKeyBehaviors + + + + VirtualMods + + nVModMapKeys + + + + ExplicitComponents + + totalKeyExplicit + + + + ModifierMap + + totalModMapKeys + + + + VirtualModMap + + totalVModMapKeys + + + + + + ServerSymbols + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + present + + KeyTypes + + nTypes + + + + KeySyms + + nKeySyms + + + + KeyActions + + nKeyActions + + + totalActions + + + + KeyBehaviors + + totalKeyBehaviors + + + + VirtualMods + + nVModMapKeys + + + + ExplicitComponents + + totalKeyExplicit + + + + ModifierMap + + totalModMapKeys + + + + VirtualModMap + + totalVModMapKeys + + + + + + IndicatorMaps + + + + + + + nIndicators + + + + KeyNames + + + + + + + + + + + + + + + + which + + Keycodes + + + + Geometry + + + + Symbols + + + + PhysSymbols + + + + Types + + + + Compat + + + + KeyTypeNames + + nTypes + + + + KTLevelNames + + nKTLevels + + + + + + + IndicatorNames + + + indicators + + + + + VirtualModNames + + + virtualMods + + + + + GroupNames + + + groupNames + + + + + KeyNames + + nKeys + + + + KeyAliases + + nKeyAliases + + + + RGNames + + nRadioGroups + + + + + + OtherNames + + + + + + + + + + + + + + + + which + + Keycodes + + + + Geometry + + + + Symbols + + + + PhysSymbols + + + + Types + + + + Compat + + + + KeyTypeNames + + nTypes + + + + KTLevelNames + + nKTLevels + + + + + + + IndicatorNames + + + indicators + + + + + VirtualModNames + + + virtualMods + + + + + GroupNames + + + groupNames + + + + + KeyNames + + nKeys + + + + KeyAliases + + nKeyAliases + + + + RGNames + + nRadioGroups + + + + + + Geometry + + + + + + + + + + + + + + + + + nProperties + + + nColors + + + nShapes + + + nSections + + + nDoodads + + + nKeyAliases + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + nameLen + + + nBtnsRtrn + + + nDeviceLedFBs + + + + + + + + + + + + + nBtns + + + nDeviceLedFBs + + + + + + + + + + + + msgLength + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3