upload tizen2.0 source 2.0alpha master 2.0_alpha submit/master/20120920.151146
authorBoram Park <boram1288.park@samsung.com>
Tue, 21 Aug 2012 09:03:51 +0000 (18:03 +0900)
committerBoram Park <boram1288.park@samsung.com>
Tue, 21 Aug 2012 09:03:51 +0000 (18:03 +0900)
COPYING
ChangeLog [changed mode: 0755->0644]
INSTALL [new file with mode: 0644]
Makefile.am [changed mode: 0755->0644]
XResproto.h
autogen.sh [changed mode: 0644->0755]
configure.ac [changed mode: 0755->0644]
packaging/xorg-x11-proto-resource.spec [new file with mode: 0644]
packaging/xorg-x11-proto-resourceproto.spec [deleted file]
resproto.txt [new file with mode: 0644]

diff --git a/COPYING b/COPYING
index 9f1e999..d878fd6 100644 (file)
--- a/COPYING
+++ b/COPYING
@@ -1,3 +1,5 @@
+Copyright (c) 2002  XFree86 Inc
+
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
 in the Software without restriction, including without limitation the rights
old mode 100755 (executable)
new mode 100644 (file)
index e8cba91..e9cbed0
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,57 @@
+commit 4be619918d604cbf63994ebe8357b811b5bd2452
+Author: Erkki Seppälä <erkki.seppala@vincit.fi>
+Date:   Fri May 27 21:25:39 2011 -0700
+
+    Bumped version number: 1.1.1 => 1.2.0
+    
+    Signed-off-by: Erkki Seppälä <erkki.seppala@vincit.fi>
+    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit c4228d3189b1d12fa65e826ab356b2eee4f0548b
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date:   Tue May 24 15:01:42 2011 -0700
+
+    Distribute & install resproto.txt with the release
+    
+    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit b2629d78ae8acfbfc449f6b0e973716975d4e8d7
+Author: Erkki Seppälä <erkki.seppala@vincit.fi>
+Date:   Tue Nov 30 14:12:58 2010 +0200
+
+    Protocol records for XRes v1.2
+    
+    Incorporates comments from the list.
+    
+    Signed-off-by: Erkki Seppälä <erkki.seppala@vincit.fi>
+    Reviewed-by: Rami Ylimäki <rami.ylimaki@vincit.fi>
+    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 1eb1d726921493db463b9b790bf25532fdc43287
+Author: Rami Ylimäki <rami.ylimaki@vincit.fi>
+Date:   Fri Dec 31 14:21:08 2010 +0200
+
+    Added protocol description for XRes v1.2
+    
+    Version 1.2 of XResource protocol adds two requests:
+    XResQueryClientIds and XResQueryResourceBytes. They can be used for
+    more exactly determining which resources are used by which clients.
+    
+    This patch incorporates comments from the mailing list.
+    
+    Acked-by: Gaetan Nadon <memsize@videotron.ca>
+    Reviewed-by: Erkki Seppälä <erkki.seppala@vincit.fi>
+    Signed-off-by: Rami Ylimäki <rami.ylimaki@vincit.fi>
+    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 386946098f97b9137af3265b5608fdcf22c7d49a
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date:   Thu Jan 6 22:16:55 2011 -0800
+
+    Add missing XFree86 copyright notice to COPYING
+    
+    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
 commit 2cbf7d2ba3da72c2454d707e0109732c46a0c9d9
 Author: Alan Coopersmith <alan.coopersmith@oracle.com>
 Date:   Wed Dec 8 22:19:47 2010 -0800
diff --git a/INSTALL b/INSTALL
new file mode 100644 (file)
index 0000000..8b82ade
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,291 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
+2006, 2007, 2008 Free Software Foundation, Inc.
+
+   This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
+Basic Installation
+==================
+
+   Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package.  The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+   It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring.  Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+   The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'.  You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.
+
+     Running `configure' might take a while.  While running, it prints
+     some messages telling which features it is checking for.
+
+  2. Type `make' to compile the package.
+
+  3. Optionally, type `make check' to run any self-tests that come with
+     the package.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.
+
+  5. You can remove the program binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.  There is
+     also a `make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+  6. Often, you can also type `make uninstall' to remove the installed
+     files again.
+
+Compilers and Options
+=====================
+
+   Some systems require unusual options for compilation or linking that
+the `configure' script does not know about.  Run `./configure --help'
+for details on some of the pertinent environment variables.
+
+   You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here
+is an example:
+
+     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+   You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you can use GNU `make'.  `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script.  `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+   With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory.  After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+   On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor.  Like
+this:
+
+     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CPP="gcc -E" CXXCPP="g++ -E"
+
+   This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
+
+Installation Names
+==================
+
+   By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc.  You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX'.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+   Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System).  The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Particular systems
+==================
+
+   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+     ./configure CC="cc -Ae"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
+a workaround.  If GNU CC is not installed, it is therefore recommended
+to try
+
+     ./configure CC="cc"
+
+and if that doesn't work, try
+
+     ./configure CC="cc -nodtk"
+
+Specifying the System Type
+==========================
+
+   There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on.  Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+`--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+     CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+     OS KERNEL-OS
+
+   See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+   If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+   If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+   Variables not defined in a site shell script can be set in the
+environment passed to `configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'.  For example:
+
+     ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf bug.  Until the bug is fixed you can use this workaround:
+
+     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
+   `configure' recognizes the following options to control how it
+operates.
+
+`--help'
+`-h'
+     Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+     Print a summary of the options unique to this package's
+     `configure', and exit.  The `short' variant lists options used
+     only in the top level, while the `recursive' variant lists options
+     also present in any nested packages.
+
+`--version'
+`-V'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     disable caching.
+
+`--config-cache'
+`-C'
+     Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
+
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
+
+`--prefix=DIR'
+     Use DIR as the installation prefix.  *Note Installation Names::
+     for more details, including other options available for fine-tuning
+     the installation locations.
+
+`--no-create'
+`-n'
+     Run the configure checks, but stop before creating any output
+     files.
+
+`configure' also accepts some other, not widely useful, options.  Run
+`configure --help' for more details.
+
old mode 100755 (executable)
new mode 100644 (file)
index 3ed1758..d5d496f
@@ -5,6 +5,7 @@ resource_HEADERS = \
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = resourceproto.pc
 
+dist_doc_DATA = resproto.txt
 
 MAINTAINERCLEANFILES = ChangeLog INSTALL
 
index 9c2abd4..d7e20b1 100644 (file)
@@ -6,15 +6,24 @@
 #define _XRESPROTO_H
 
 #define XRES_MAJOR_VERSION 1
-#define XRES_MINOR_VERSION 0
+#define XRES_MINOR_VERSION 2
 
 #define XRES_NAME "X-Resource"
 
+/* v1.0 */
 #define X_XResQueryVersion            0
 #define X_XResQueryClients            1
 #define X_XResQueryClientResources    2
 #define X_XResQueryClientPixmapBytes  3
 
+/* Version 1.1 has been accidentally released from the version           */
+/* control and while it doesn't have differences to version 1.0, the     */
+/* next version is labeled 1.2 in order to remove the risk of confusion. */
+
+/* v1.2 */
+#define X_XResQueryClientIds          4
+#define X_XResQueryResourceBytes      5
+
 typedef struct {
    CARD32 resource_base;
    CARD32 resource_mask;
@@ -125,5 +134,94 @@ typedef struct {
 } xXResQueryClientPixmapBytesReply;
 #define sz_xXResQueryClientPixmapBytesReply  32
 
+/* v1.2 XResQueryClientIds */
+
+#define X_XResClientXIDMask      0x01
+#define X_XResLocalClientPIDMask 0x02
+
+typedef struct _XResClientIdSpec {
+   CARD32  client B32;
+   CARD32  mask B32;
+} xXResClientIdSpec;
+#define sz_xXResClientIdSpec 8
+
+typedef struct _XResClientIdValue {
+   xXResClientIdSpec spec;
+   CARD32  length B32;
+   // followed by length CARD32s
+} xXResClientIdValue;
+#define sz_xResClientIdValue (sz_xXResClientIdSpec + 4)
+
+typedef struct _XResQueryClientIds {
+   CARD8   reqType;
+   CARD8   XResReqType;
+   CARD16  length B16;
+   CARD32  numSpecs B32;
+   // followed by numSpecs times XResClientIdSpec
+} xXResQueryClientIdsReq;
+#define sz_xXResQueryClientIdsReq 8
+
+typedef struct {
+   CARD8   type;
+   CARD8   pad1;
+   CARD16  sequenceNumber B16;
+   CARD32  length B32;
+   CARD32  numIds B32;
+   CARD32  pad2 B32;
+   CARD32  pad3 B32;
+   CARD32  pad4 B32;
+   CARD32  pad5 B32;
+   CARD32  pad6 B32;
+   // followed by numIds times XResClientIdValue
+} xXResQueryClientIdsReply;
+#define sz_xXResQueryClientIdsReply  32
+
+/* v1.2 XResQueryResourceBytes */
+
+typedef struct _XResResourceIdSpec {
+   CARD32  resource;
+   CARD32  type;
+} xXResResourceIdSpec;
+#define sz_xXResResourceIdSpec 8
+
+typedef struct _XResQueryResourceBytes {
+   CARD8   reqType;
+   CARD8   XResReqType;
+   CARD16  length B16;
+   CARD32  client B32;
+   CARD32  numSpecs B32;
+   // followed by numSpecs times XResResourceIdSpec
+} xXResQueryResourceBytesReq;
+#define sz_xXResQueryResourceBytesReq 12
+
+typedef struct _XResResourceSizeSpec {
+   xXResResourceIdSpec spec;
+   CARD32  bytes B32;
+   CARD32  refCount B32;
+   CARD32  useCount B32;
+} xXResResourceSizeSpec;
+#define sz_xXResResourceSizeSpec (sz_xXResResourceIdSpec + 12)
+
+typedef struct _XResResourceSizeValue {
+   xXResResourceSizeSpec size;
+   CARD32  numCrossReferences B32;
+   // followed by numCrossReferences times XResResourceSizeSpec
+} xXResResourceSizeValue;
+#define sz_xXResResourceSizeValue (sz_xXResResourceSizeSpec + 4)
+
+typedef struct {
+   CARD8   type;
+   CARD8   pad1;
+   CARD16  sequenceNumber B16;
+   CARD32  length B32;
+   CARD32  numSizes B32;
+   CARD32  pad2 B32;
+   CARD32  pad3 B32;
+   CARD32  pad4 B32;
+   CARD32  pad5 B32;
+   CARD32  pad6 B32;
+   // followed by numSizes times XResResourceSizeValue
+} xXResQueryResourceBytesReply;
+#define sz_xXResQueryResourceBytesReply  32
 
 #endif /* _XRESPROTO_H */
old mode 100644 (file)
new mode 100755 (executable)
old mode 100755 (executable)
new mode 100644 (file)
index faecc62..328a7cf
@@ -3,7 +3,7 @@ dnl Process this file with autoconf to create configure.
 
 # Initialize Autoconf
 AC_PREREQ([2.60])
-AC_INIT([ResourceProto],[1.1.1],
+AC_INIT([ResourceProto],[1.2.0],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg])
 AC_CONFIG_SRCDIR([Makefile.am])
 
diff --git a/packaging/xorg-x11-proto-resource.spec b/packaging/xorg-x11-proto-resource.spec
new file mode 100644 (file)
index 0000000..b071898
--- /dev/null
@@ -0,0 +1,45 @@
+Name:     xorg-x11-proto-resource
+Summary:  X.Org X11 Protocol resourceproto
+Version:  1.2.0
+Release:  1
+Group:    Development/System
+License:  MIT
+URL:      http://www.x.org
+Source0:  %{name}-%{version}.tar.gz
+Provides: resourceproto
+
+BuildRequires: pkgconfig
+BuildRequires: pkgconfig(xorg-macros)
+
+# some file to be intalled can be ignored when rpm generates packages
+%define _unpackaged_files_terminate_build 0
+
+%description
+Description: %{summary}
+
+%prep
+%setup -q
+
+%build
+
+./autogen.sh
+%reconfigure --disable-static \
+             --libdir=%{_datadir} \
+             --without-xmlto
+
+# Call make instruction with smp support
+make %{?jobs:-j%jobs}
+
+%install
+rm -rf %{buildroot}
+%make_install
+
+%remove_docs
+
+%clean
+rm -rf %{buildroot}
+
+%files
+%defattr(-,root,root,-)
+%{_includedir}/X11/extensions/*.h
+%{_datadir}/pkgconfig/*.pc
\ No newline at end of file
diff --git a/packaging/xorg-x11-proto-resourceproto.spec b/packaging/xorg-x11-proto-resourceproto.spec
deleted file mode 100644 (file)
index 57251d7..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-
-Name:       xorg-x11-proto-resourceproto
-Summary:    X.Org X11 Protocol resourceproto
-Version:    1.1.1
-Release:    0
-Group:      Development/System
-License:    MIT
-URL:        http://www.x.org
-Source0:    http://xorg.freedesktop.org/releases/individual/proto/resourceproto-%{version}.tar.gz
-Provides:   resourceproto
-
-BuildRequires:  pkgconfig(xorg-macros)
-
-%description
-Description: %{summary}
-
-
-
-%prep
-%setup -q -n resourceproto-%{version}
-
-%build
-
-%reconfigure --disable-shared
-
-# Call make instruction with smp support
-make %{?jobs:-j%jobs}
-
-%install
-rm -rf %{buildroot}
-%make_install
-
-
-%clean
-rm -rf %{buildroot}
-
-
-
-
-
-
-%files
-%defattr(-,root,root,-)
-%{_libdir}/pkgconfig/resourceproto.pc
-%{_includedir}/X11/extensions/XResproto.h
-
-
diff --git a/resproto.txt b/resproto.txt
new file mode 100644 (file)
index 0000000..8b322ff
--- /dev/null
@@ -0,0 +1,462 @@
+                           DRAFT FOR REVIEW
+                       The X Resource Extension
+                             Version 1.2
+                             Rami Ylimäki
+                        rami.ylimaki@vincit.fi
+
+                             ❧❧❧❧❧❧❧❧❧❧❧
+
+1. Introduction
+
+The protocol description of X Resource Extension version 1.1 has been
+either lost or has never been written. This specification documents
+version 1.0 based on reverse engineered library and server
+code. Version 1.1 has been accidentally released from the version
+control and while it doesn't have differences to version 1.0, this
+version is labeled 1.2 in order to remove the risk of confusion. In
+addition to the 1.0 description, this document introduces a new 1.2
+version of the extension.
+
+Version 1.2 is a minor release and therefore the changes are
+compatible with the previous version. Main enhancements over version
+1.0 are:
+
+- Client identification is now possible. For example, servers
+  supporting version 1.2 may report PID of local clients.
+
+- Size of any resource can be queried from the server. Servers may not
+  necessarily support size calculation for every resource. However,
+  clients have now at least the chance to let the server do resource
+  size estimation for them.
+
+                             ❧❧❧❧❧❧❧❧❧❧❧
+
+2. Notations used in this document
+
+Notation for data types and requests follows the guidelines set in
+sections 2-4 of X Window System Protocol standard.
+
+                             ❧❧❧❧❧❧❧❧❧❧❧
+
+3. Interoperability between version 1.1 and 1.2
+
+Version 1.2 only introduces two new requests. However, these requests
+could be seen as generalized versions of existing requests. Even
+though we aren't deprecating any old requests, libraries could
+implement some old requests using the new ones.
+
+The new XResQueryClientIds request could be used instead of
+XResQueryClients.
+
+The new XResQueryResourceBytes request could be used instead of
+XResQueryClientPixmapBytes.
+
+Using the old requests is still acceptable because we don't want to
+change the semantics of existing requests between version 1.1 and 1.2.
+
+                             ❧❧❧❧❧❧❧❧❧❧❧
+
+4. Data types
+
+4.1 Types in version 1.0
+
+CLIENTXIDRANGE [ resource_base: CARD32
+                 resource_mask: CARD32 ]
+
+This type is used for reply of XResQueryClients in version 1.1. It
+represents the range of resource allocated for a client and can be
+also used for client identification.
+
+resource_base
+    First resource ID reserved for a client. Used also to identify the
+    clients themselves.
+resource_mask
+    Mask that can be used to identify a client from some resource
+    ID. Just zero the bits indicated by this mask from any resource ID
+    to identify the client that owns the resource.
+
+CLIENTXID [ client: XID ]
+
+This type identifies a single client by a resource owned by that
+client or by the first resource ID allocated for the client
+(resource_base of CLIENTXIDRANGE). Whenever a resource ID is used, it
+is masked by resource_mask of CLIENTXIDRANGE to find out the client
+that owns the resource.
+
+CLIENTRESOURCETYPECOUNT [ resource_type: ATOM
+                          count:         CARD32 ]
+
+This type is used for reply of XResQueryClientResources in version
+1.1. It represents the number of certain type of resources that are
+owned by some client.
+
+resource_type
+    Atom specifying the type of a resource.
+count
+    Number of resources of the given type owned by a client.
+
+4.2 Types in version 1.2
+
+4.2.1 Types used by XResQueryClientIds
+
+CLIENTIDMASK { ClientXid = 0x1, LocalClientPid = 0x2 }
+
+A bitmask specifying a client identification method. Currently only
+the PID of local clients is supported in the form of
+LocalClientPid. ClientXid is provided for backward compatibility with
+version 1.0 so that the new 1.2 requests (XResQueryClientIds) can be
+used in place of the older ones (XResQueryClients).
+
+CLIENTIDSPEC [ client: CLIENTXID or None
+               mask:   SETofCLIENTIDMASK or None ]
+
+A data structure for selecting client IDs.
+
+client
+    ID of a resource allocated for some client. Only the part
+    identifying a client is actually used. The resource_base of
+    CLIENTXIDRANGE can be used if the client doesn't own any
+    resources. However, any resource ID is accepted because that makes
+    identifying the owners of existing resources easy. The null
+    resource None can be used to select all clients.
+mask
+    Collection of identification methods that should be applied on the
+    client. The special value None can be used to apply all supported
+    identification methods.
+
+CLIENTIDVALUE [ spec:   CLIENTIDSPEC
+                length: CARD32
+                value:  LISTofCARD32 ]
+
+A data structure specifying a single client ID.
+
+spec
+    A unique identifier for a specific ID of some client. Wildcards
+    such as None and bitmask unions aren't allowed. The data structure
+    must always identify a single client and single ID type. However,
+    the client doesn't have to be specified as the resource_base of
+    CLIENTXIDRANGE and can be any resource owned by the client.
+length
+    Specifies the length of an ID in units of CARD32. The length
+    depends on the ID type. In version 1.2 the lengths are 0 for
+    ClientXid and 4 for LocalClientPid. The length of ClientXid is 0
+    because that is already stored in the spec field.
+value
+    Actual ID data. In version 1.2 this is missing for ClientXid and
+    consists of a single CARD32 for LocalClientPid.
+
+4.2.2 Types used by XResQueryResourceBytes
+
+To better understand how resources are related to each other, it's
+useful to introduce the concepts of main resource and cross
+reference. By main resource we just mean a normal resource that has a
+valid XID. By cross reference we mean a resource that is used by some
+other resource.
+
+The same resource may have both of these roles depending on the
+context. For example, there could be an ordinary pixmap resource. When
+we talk about this resource in isolation the term main resource is
+used. We call the exact same resource a cross reference when we are
+concentrating on some higher level resource, such as window or
+graphics context, that is using the lower level resource. Cross
+references may also be internal server resources that don't have a
+valid XID.
+
+RESOURCEIDSPEC [ resource: XID or None
+                 type:     ATOM or None/AnyPropertyType ]
+
+A data structure for selecting or identifying resources. The
+interpretation of fields changes depending on the context. The
+differences in interpretation are described below.
+
+resource
+    An XID of a resource. The null resource None can be used to select
+    all resources matching some type if the data structure is used in
+    XResQueryResourceBytes request. The null resource None can be used
+    to mark private server resources if the data structure is used in
+    a cross reference of XResQueryResourceBytes reply.
+type
+    An atom identifying the resource type. The null atom
+    None/AnyPropertyType can be used to select all resource types
+    matching some resource ID if the data structure is used in
+    XResQueryResourceBytes request.
+
+RESOURCESIZESPEC [ spec:      RESOURCEIDSPEC
+                   bytes:     CARD32
+                   ref_count: CARD32
+                   use_count: CARD32 ]
+
+A data structure specifying the size of a single resource.
+
+spec
+    Uniquely identifies a single resource. Wildcards such as None and
+    AnyPropertyType aren't allowed for main resources. In cross
+    references, None is used to mark internal server resources.
+bytes
+    Number of bytes allocated for the resource. The size of a resource
+    is never divided by a reference count. This is the number of bytes
+    released in server when there are no more references left to the
+    resource.
+ref_count
+    Number of total users of the resource. Typically the reference
+    count is 1 but for pixmaps and other resources used from different
+    contexts the count may be larger.
+use_count
+    Number of times the resource is used by some other resource. For
+    main resources this is typically 1, because a resource doesn't
+    usually use itself recursively. For cross references this is the
+    number of times the resource is used and is also 1 usually.
+
+RESOURCESIZEVALUE [ size:                 RESOURCESIZESPEC
+                    num_cross_references: CARD32
+                    cross_references:     LISTofRESOURCESIZESPEC ]
+
+A data structure specifying sizes of cross references to other
+resources in addition to the main resource size.
+
+size
+    Size of a main resource.
+num_cross_references
+    Number of cross references to other resources from the main
+    resource. Currently resources can only have pixmaps as cross
+    references but this can be extended to other types in the
+    future. For simple resources this field is therefore 0 and the
+    cross_references list is missing.
+cross_references:
+    Size specifications for cross references. Note that cross
+    references may contain resources that don't have a valid XID. For
+    example, a DRI2 drawable might have a cross reference to a private
+    pixmap that is used internally in the server only. These private
+    cross references are contained in this list also. This makes it
+    possible to emulate XResGetClientPixmapBytes with
+    XResGetResourceBytes.
+
+                             ❧❧❧❧❧❧❧❧❧❧❧
+
+5. Requests
+
+5.1 Requests in version 1.0
+
+┌───
+    XResQueryVersion
+    client_major: CARD8
+    client_minor: CARD8
+    ▶
+    server_major: CARD16
+    server_minor: CARD16
+└───
+
+The client sends the highest supported version to the server and the
+server sends the highest version it supports, but no higher than the
+requested version. Major version changes can introduce
+incompatibilities in existing functionality, minor version changes
+introduce only backward compatible changes. It is the client's
+responsibility to ensure that the server supports a version which is
+compatible with its expectations.
+
+client_major
+    Major X Resource Extension version supported by client.
+client_minor
+    Minor X Resource Extension version supported by client.
+server_major
+    Highest version supported by server that is compatible with
+    client.
+server_minor
+    Highest version supported by server that is compatible with
+    client.
+
+┌───
+    XResQueryClients
+    ▶
+    num_clients: CARD32
+    clients:     LISTofCLIENTXIDRANGE
+└───
+
+The request asks X server to return the list of all currently
+connected clients.
+
+num_clients
+    Number of currently connected clients.
+clients
+    List of XID ranges allocated for the connected clients.
+
+┌───
+    XResQueryClientResources
+    client:    CLIENTXID
+    ▶
+    num_types: CARD32
+    types:     LISTofCLIENTRESOURCETYPECOUNT
+
+    Errors:    Value
+└───
+
+This request can be used to ask the number of resources owned by a
+client. The server will return the counts of each type of resource.
+
+client
+    An XID in the resource range of a client. This identifies the
+    client and not some specific resource.
+num_types
+    Number of different resource types owned by the client.
+types
+    A list of counts for each resource type.
+
+A value error is generated if invalid resource or client XID is given
+in the request.
+
+┌───
+    XResQueryClientPixmapBytes
+    client:         CLIENTXID
+    ▶
+    bytes:          CARD32
+    bytes_overflow: CARD32
+
+    Errors:         Value
+└───
+
+This request is used to get the pixmap usage of some client. The
+returned number is a sum of memory usage of each pixmap that can be
+attributed to the given client. Ideally the server goes through all
+pixmaps and divides each pixmap size by the pixmap reference count to
+get a pixmap reference size. The reference size is then added to the
+returned sum if the client happens to be referencing that pixmap. In
+practice some pixmap references may be missed, because it would be too
+difficult to keep track of all pixmap references. However, the server
+will check the most important client resources that are using pixmaps
+and tries to estimate the pixmap usage as well as is possible. In
+other words, the server need only make a best-effort attempt to
+calculate resource source, so actual resource size may differ from
+that reported in practice.
+
+client
+    Identifies a client by an ID in its resource ID range.
+bytes:
+    Number of bytes attributed to pixmap references from the client
+    resources.
+bytes_overflow:
+    Higher order word for the bytes field in case the sum of pixmap
+    reference sizes doesn't fit in CARD32.
+
+A value error is generated if invalid resource or client XID is given
+in the request.
+
+5.2 Requests in version 1.2
+
+┌───
+    XResQueryClientIds
+    num_specs:    CARD32
+    client_specs: LISTofCLIENTIDSPEC
+    ▶
+    num_ids:      CARD32
+    client_ids:   LISTofCLIENTIDVALUE
+
+    Errors:       Value
+└───
+
+XResQueryClientIds can be used to identify a given set of clients with
+some identification method. The request sends a list of specifiers
+that select clients and identification methods to server. The server
+then tries to identify the chosen clients using the identification
+methods specified for each client. The server returns IDs for those
+clients that were successfully identified. It's not an error condition
+if some identification method couldn't be applied to a client. If the
+server is unable to identify some clients, they simply aren't included
+in the returned list.
+
+The request supports wildcards in the client specifications so that in
+the most general case all IDs of all clients can be queried with a
+single CLIENTIDSPEC.
+
+The CLIENTIDSPEC of request and CLIENTIDSPEC of CLIENTIDVALUE in reply
+usually match each other. For example, if a request selected a client
+by a resource ID owned by the client, then the client is identified by
+the same resource ID in the reply. This has been done so that it would
+be easy to identify an owner of some resource.
+
+However, the CLIENTIDSPEC of returned CLIENTIDVALUE never contains any
+wildcards. If the request used a wildcard to specify all clients in a
+single CLIENTIDSPEC, then the reply has expanded the wildcard and
+returns separate CLIENTIDVALUE records for each client. In this case
+wildcarded clients are identified by resource_base of CLIENTXIDRANGE.
+
+The LocalClientPid type of IDs are included in the reply list only if
+the client executing the request asked for it and was also a local
+client itself. It doesn't make sense for remote clients to ask PIDs of
+local clients.
+
+num_specs
+    Number of client ID specifications.
+client_specs
+    A list specifying identification methods for clients. Supports
+    multiple identification methods and clients in a single
+    specification. See CLIENTIDSPEC for details.
+num_ids
+    Number of IDs that were successfully determined. Can be different
+    from num_specs or even zero if the server didn't support any
+    identification methods for the given clients.
+client_ids
+    A list specifying ID information for successfully identified
+    clients. If wildcards were used in a single CLIENTIDSPEC of
+    client_specs, then multiple CLIENTIDVALUE records may be returned
+    for that CLIENTIDSPEC. See CLIENTIDVALUE for details.
+
+A Value error is returned if the request specifies an invalid client
+XID or invalid identification method type.
+
+┌───
+    XResQueryResourceBytes
+    client:         CLIENTXID or None
+    num_specs:      CARD32
+    resource_specs: LISTofRESOURCEIDSPEC
+    ▶
+    num_sizes:      CARD32
+    sizes:          LISTofRESOURCESIZEVALUE
+
+    Errors:         Atom, Value
+└───
+
+XResQueryResourceBytes can be used to ask the sizes of resources from
+X server. The request sends a list of specifiers that selects
+resources for size calculation. The server tries to calculate the
+sizes of chosen resources and returns an estimate for a resource only
+if the size could be determined. It's not an error condition if a size
+couldn't be calculated. In that case the resources simply aren't
+included in the returned list.
+
+The request supports wildcards so that in the most general case sizes
+of all resources of all clients can be queried with a single
+RESOURCEIDSPEC. However, the reply has all wildcards expanded and
+reports a size of a single resource in each RESOURCESIZEVALUE.
+
+client
+    An ID of a client can be given to limit the query to resources of
+    that client. Just like in CLIENTIDSPEC, any resource ID can be
+    given to identify a client and None can be used if the query
+    shouldn't be limited to a specific client. Note that in some cases
+    this field is redundant because resource_specs already fully
+    determines which resources are selected. If the client ID doesn't
+    match the owner of any resource in resource_specs, no sizes are
+    returned and no error is generated.
+num_specs
+    Number of resource specifications.
+resource_specs
+    A list of resource specifications. Each specification can either
+    uniquely identify a single resource or multiple resources if
+    wildcarding is used. See RESOURCEIDSPEC for details.
+num_sizes
+    Number of resources whose size could be determined. Can be
+    different from num_specs or even zero if the server didn't support
+    size calculation for the given resources.
+sizes
+    A list of resource sizes. Each resource size is linked to a unique
+    resource. Wildcards are never used in the returned size
+    records. For example, it's not possible to receive a single
+    RESOURCESIZEVALUE that would specify the size of all pixmaps if
+    the sizes of pixmap type resources were asked. Instead, a single
+    RESOURCESIZEVALUE would be returned for each pixmap in that case.
+
+An Atom error is returned if the request specifies an invalid resource
+type. A Value error is returned if the request specifies an invalid
+XID for a client or a resource.
+
+                             ❧❧❧❧❧❧❧❧❧❧❧