summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGaetan Nadon <memsize@videotron.ca>2010-06-26 13:36:29 -0400
committerGaetan Nadon <memsize@videotron.ca>2010-06-26 16:53:58 -0400
commitb6a6644e371192be281ff96c59aa39f32ba64a84 (patch)
tree6e1daa905e6f78a6eba7ecf676550d96129700b8
parentbbae053ca8bce46639f74f88dc9f687fe53e7c86 (diff)
doc: replace groff input format with docbook xml format
Initial version of xtestlib and recordlib docbook xml. recordlib is missing and will be added later Requires util-macros 1.10 Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
-rw-r--r--configure.ac9
-rw-r--r--specs/.gitignore6
-rw-r--r--specs/Makefile.am71
-rw-r--r--specs/macros.t226
-rw-r--r--specs/recordlib.ms1409
-rw-r--r--specs/xtestlib.ms446
-rw-r--r--specs/xtestlib.xml468
7 files changed, 503 insertions, 2132 deletions
diff --git a/configure.ac b/configure.ac
index 08ec061..a747151 100644
--- a/configure.ac
+++ b/configure.ac
@@ -27,14 +27,15 @@ AC_INIT(libXtst, 1.1.0, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg
AM_INIT_AUTOMAKE([foreign dist-bzip2])
AM_MAINTAINER_MODE
-# Require xorg-macros: XORG_DEFAULT_OPTIONS
+# Require xorg-macros minimum of 1.10 for DocBook XML documentation
m4_ifndef([XORG_MACROS_VERSION],
- [m4_fatal([must install xorg-macros 1.6 or later before running autoconf/autogen])])
-XORG_MACROS_VERSION(1.6)
+ [m4_fatal([must install xorg-macros 1.10 or later before running autoconf/autogen])])
+XORG_MACROS_VERSION(1.10)
XORG_DEFAULT_OPTIONS
XORG_ENABLE_SPECS
XORG_WITH_XMLTO(0.0.20)
-XORG_WITH_GROFF
+XORG_WITH_FOP
+XORG_CHECK_SGML_DOCTOOLS(1.5)
AM_CONFIG_HEADER(config.h)
# Check for progs
diff --git a/specs/.gitignore b/specs/.gitignore
index 84d7456..12fe512 100644
--- a/specs/.gitignore
+++ b/specs/.gitignore
@@ -1,8 +1,6 @@
# Add & Override for this directory and it's subdirectories
*.html
*.ps
+*.pdf
*.txt
-*.html.raw
-*.ps.raw
-*.txt.raw
-/images
+*.css
diff --git a/specs/Makefile.am b/specs/Makefile.am
index 74669fd..8ba5590 100644
--- a/specs/Makefile.am
+++ b/specs/Makefile.am
@@ -21,59 +21,44 @@
# DEALINGS IN THE SOFTWARE.
#
-EXTRA_DIST = macros.t recordlib.ms xtestlib.ms
-
if ENABLE_SPECS
-if HAVE_GROFF_MS
-doc_DATA = recordlib.txt recordlib.ps recordlib.html xtestlib.txt xtestlib.ps xtestlib.html
-imagesdir = $(docdir)/images
+doc_sources = xtestlib.xml
+dist_doc_DATA = $(doc_sources)
-CLEANFILES = $(doc_DATA)
-MOSTLYCLEANFILES = index.*
+if HAVE_XMLTO
+doc_DATA = $(doc_sources:.xml=.html)
-install-data-local:
- test -z "$(imagesdir)" || $(mkdir_p) "$(DESTDIR)$(imagesdir)"
- @d="$(srcdir)/images/"; \
- list=`ls $$d`; \
- for p in $$list; do \
- echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(imagesdir)/$$p'"; \
- $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(imagesdir)/$$p"; \
- done;
+if HAVE_FOP
+doc_DATA += $(doc_sources:.xml=.ps) $(doc_sources:.xml=.pdf)
+endif
-uninstall-local:
- @if test -n $(DESTDIR)$(imagesdir); then \
- if test -d $(DESTDIR)$(imagesdir); then \
- list=`ls $(DESTDIR)$(imagesdir)`; \
- for p in $$list; do \
- echo " rm -f '$(DESTDIR)$(imagesdir)/$$p'"; \
- rm -f "$(DESTDIR)$(imagesdir)/$$p"; \
- done \
- fi; \
- fi;
+if HAVE_XMLTO_TEXT
+doc_DATA += $(doc_sources:.xml=.txt)
+endif
-mostlyclean-local:
- @rm -fr images
+if HAVE_STYLESHEETS
+XMLTO_FLAGS = -m $(XSL_STYLESHEET)
-# Pass version string as a troff string for substitution
-GROFF_DEFS = -dxV="$(PACKAGE_STRING)"
+doc_DATA += xorg.css
+xorg.css: $(STYLESHEET_SRCDIR)/xorg.css
+ $(AM_V_GEN)cp -pf $(STYLESHEET_SRCDIR)/xorg.css $@
+endif
-# -t to run through tbl
-GROFF_FLAGS = -t -ms $(GROFF_DEFS) $(srcdir)/macros.t
+CLEANFILES = $(doc_DATA)
-SUFFIXES = .ms .ps .txt .html
+SUFFIXES = .xml .ps .pdf .txt .html
-.ms.ps:
- -$(AM_V_GEN) $(GROFF) -Tps $(GROFF_FLAGS) $< 2> index.$@.raw > $@
- @if grep '^[^1-9.]' index.$@.raw | grep -v warning; then exit 1; \
- else test $$? -le 1; fi
+.xml.txt:
+ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) txt $<
-.ms.txt:
- $(AM_V_GEN) env GROFF_NO_SGR=TRUE $(GROFF) -Tutf8 $(GROFF_FLAGS) \
- $< 2> index.$@.raw > $@
+.xml.html:
+ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) xhtml-nochunks $<
-.ms.html:
- $(AM_V_GEN) $(GROFF) -Thtml -P-Dimages -P-I$*-image $(GROFF_FLAGS) $< 2> index.$@.raw > $@
+.xml.pdf:
+ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop pdf $<
-endif HAVE_GROFF_MS
-endif ENABLE_SPECS
+.xml.ps:
+ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop ps $<
+endif HAVE_XMLTO
+endif ENABLE_SPECS
diff --git a/specs/macros.t b/specs/macros.t
deleted file mode 100644
index cbc599b..0000000
--- a/specs/macros.t
+++ /dev/null
@@ -1,226 +0,0 @@
-.\" $Xorg: macros.t,v 1.3 2000/08/17 19:42:51 cpqbld Exp $
-.\" macros.t -- macros for X Consortium documents
-.\" Revised and commented by smarks 93.12.20.
-.\"
-.\" global setup: set ragged right, assign string variables
-.\"
-.na
-.ie n \{\
-.ds Q \&"
-.ds U \&"
-.ds - \%--
-.\}
-.el \{\
-.ds Q `\h'-\w'\^'u'`
-.ds U '\h'-\w'\^'u''
-.ds - \(em
-.\}
-.\"
-.\" --- Ds --- displayed text (like .DS) with no keep
-.\" .Ds is obsolete. Change to something from this table:
-.\" for this use instead
-.\" .Ds .ID
-.\" .Ds n .LD (where "n" is a number)
-.\" (Numbers don't work in these macros, so ".Ds 5"
-.\" comes out the same as ".Ds 0".)
-.\"
-.de Ds
-.nf
-.\\$1D \\$2 \\$1
-.ft 1
-.ps \\n(PS
-.if \\n(VS>=40 .vs \\n(VSu
-.if \\n(VS<=39 .vs \\n(VSp
-..
-.de D
-.ID \\$1
-..
-.de 0D
-.LD
-..
-.\" backward compatibility for the Xt spec
-.de 5D
-.LD
-..
-.\"
-.\" --- De --- obsolete: use .DE instead
-.\"
-.de De
-.DE
-..
-.\"
-.\" --- FD ---
-.\"
-.de FD
-.LP
-.KS
-.TA .5i 3i
-.ta .5i 3i
-.nf
-..
-.\"
-.\" --- FN ---
-.\"
-.de FN
-.fi
-.KE
-.LP
-..
-.\"
-.\" --- IN --- send an index entry to the stderr
-.\"
-.de IN
-.tm \\n%:\\$1:\\$2:\\$3
-..
-.\"
-.\" --- C{ ---
-.\"
-.de C{
-.KS
-.nf
-.D
-.\"
-.\" choose appropriate monospace font
-.\" the imagen conditional, 480,
-.\" may be changed to L if LB is too
-.\" heavy for your eyes...
-.\"
-.ie "\\*(.T"480" .ft L
-.el .ie "\\*(.T"300" .ft L
-.el .ie "\\*(.T"202" .ft PO
-.el .ie "\\*(.T"aps" .ft CW
-.el .ft R
-.ps \\n(PS
-.ie \\n(VS>40 .vs \\n(VSu
-.el .vs \\n(VSp
-..
-.\"
-.\" --- C} ---
-.\"
-.de C}
-.DE
-.R
-..
-.\"
-.\" --- Pn --- like PN, but use $2; $1 and $3 abut
-.\"
-.de Pn
-.IN \\$2
-.ie t \\$1\fB\^\\$2\^\fR\\$3
-.el \\$1\fI\^\\$2\^\fP\\$3
-..
-.\"
-.\" --- PN --- put $1 in boldface and add index entry; $2 abuts
-.\"
-.de PN
-.IN \\$1
-.ie t \fB\^\\$1\^\fR\\$2
-.el \fI\^\\$1\^\fP\\$2
-..
-.\"
-.\" --- hI --- add index entry for $1 as header file
-.\"
-.de hI
-.IN <\\$1>
-.IN Files <\\$1>
-.IN Headers <\\$1>
-..
-.\"
-.\" --- hN --- put $1 in boldface as header and add index entry; $2 abuts
-.\"
-.de hN
-.hI \\$1
-.ie t <\fB\\$1\fR>\\$2
-.el <\fI\\$1\fP>\\$2
-..
-.\"
-.\" --- NT ---
-.\"
-.de NT
-.br
-.ne 7
-.ds NO Note
-.if \\n(.$ .ds NO \\$1
-.ie n .sp
-.el .sp 10p
-.ce
-\\*(NO
-.ie n .sp
-.el .sp 5p
-.if '\\$1'C' .ce 99
-.if '\\$2'C' .ce 99
-.\" .QS/.QE macros don't exist in older versions of -ms
-.ie \\n(GS .QS
-.el \{\
-. in +5n
-. ll -5n
-.\}
-.R
-..
-.\"
-.\" --- NE --- Note End (doug kraft 3/85)
-.\"
-.de NE
-.ce 0
-.ie \\n(GS .QE
-.el \{\
-. in -5n
-. ll +5n
-.\}
-.ie n .sp
-.el .sp 10p
-..
-.\"
-.\" --- nH --- numbered header (like NH) but with automatic TOC entry
-.\" usage: .nH level "section title, preferable in quotes"
-.\"
-.de nH
-.NH \\$1
-\\$2
-.XS
-\\*(SN \\$2
-.XE
-..
-.\"
-.\" --- sM --- put start-marker in margin
-.\"
-.de sM
-.KS
-.sp 1
-\\h'-0.5i'\\L'-1v'\\v'1p'\\l'1v'\\v'1v-1p'
-.sp -1
-..
-.\"
-.\" --- eM --- put end-marker in margin
-.\"
-.de eM
-.sp -1
-\\h'-0.5i'\\L'-1v'\\v'1v+1p'\\l'1v'\\v'-1p'
-.sp 1
-.KE
-..
-.\"
-.\" --- YZ --- finish up; $1 is the starting page number of the TOC
-.\"
-.de YZ
-. \" Force there to be an even number of pages, so the table of
-. \" contents doesn't end up on the back of the last page in
-. \" the case of duplex printing.
-.if o .bp
-. \" Emit a .pn directive with one plus the last page number.
- \" This will be the number of the first page of the index.
-.nr YZ \\n%+1
-.tm .pn \\n(YZ
-. \" Issue the table of contents, setting roman numerals,
-. \" and redefining the footer to use them.
-.bp \\$1
-.af PN i
-.EF ''\\\\\\\\n(PN''
-.OF ''\\\\\\\\n(PN''
-. \" Why all the backslashes? This string is evaluated
-. \" three times: 1) during the definition of this macro,
-. \" 2) when the .EF and .OF macros are expanded, and 3)
-. \" when the bottom-of-page trap is invoked. Thus,
-. \" eight backslashes are reduced to one in the final output.
-.PX
-..
diff --git a/specs/recordlib.ms b/specs/recordlib.ms
deleted file mode 100644
index c9fe8e0..0000000
--- a/specs/recordlib.ms
+++ /dev/null
@@ -1,1409 +0,0 @@
-.\" Record Extension Library, v1.13
-.\" Use -ms and macros.t
-.\" edited for DP edits and code consistency w/ core protocol/xlib 4/1/96
-.\" $Xorg: recordlib.ms,v 1.3 2000/08/17 19:42:36 cpqbld Exp $
-.\" $XdotOrg: xc/doc/specs/Xext/recordlib.ms,v 1.2 2004/04/23 18:42:18 eich Exp $
-.\" -----------------------------------------------
-.de Ip
-.IP \(bu 5
-..
-.de sC \" start change (gildea). arg is issue number
-.mc \s+5\(br\s0\" \" make tall enough to span paragraph skip
-.if !^\\$1^^ \{\
-'sp -1
-.lt +\w'000'u+\w'\s-2\&\\$1\s0'u
-.tl !!!\v'\n(.vu'\s-2\&\\$1\s0!
-.lt -\w'000'u+\w'\s-2\&\\$1\s0'u
-.\}
-..
-.de eC \" end change
-.if \\n(.u .mc \s+5\(br\s0\" ensure it appears on the last line
-.mc
-..
-.\"
-.hw XRecord-Register-Clients XRecord-Unregister-Clients
-.hw XRecord-Intercept-Data XRecord-Query-Version XRecord-Process-Replies
-.hw XRecord-EndOfData
-.hw XButton-Released-Event XMotion-Event
-.hw XRecord-Context
-.EH ''''
-.OH ''''
-.EF ''''
-.OF ''''
-.fi
-.ps 11
-.nr PS 11
-\&
-.sp 8
-.ce 50
-\s+3\fBX Record Extension Library\fP\s0
-.sp
-\fBVersion 1.13\fP
-.sp
-\fBX Consortium Standard\fP
-.sp
-\fBX Version 11, Release 6.8\fP
-.sp 6
-Martha Zimet
-Network Computing Devices, Inc.
-.sp 6
-edited by
-Stephen Gildea
-X Consortium
-.ce 0
-.bp
-.br
-\&
-.sp 13
-.ps 9
-.nr PS 9
-.fi
-.LP
-Copyright \(co 1994 Network Computing Devices, Inc.
-.LP
-Permission to use, copy, modify, distribute, and sell this
-documentation for any purpose is hereby granted without fee,
-provided that the above copyright notice and this permission
-notice appear in all copies. Network Computing Devices, Inc.
-makes no representations about the suitability for any purpose
-of the information in this document. This documentation is
-provided \*Qas is\*U without express or implied warranty.
-.LP
-Copyright \(co 1995 X Consortium
-.LP
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-\*QSoftware\*U), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-.LP
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-.LP
-THE SOFTWARE IS PROVIDED \*QAS IS\*U, WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-.LP
-Except as contained in this notice, the name of the X Consortium and
-shall not be used in advertising or otherwise to promote the sale, use
-or other dealings in this Software without prior written authorization
-from the X Consortium.
-.ps 11
-.nr PS 11
-.P1
-.nr LL 6.5i
-.nr LT 6.5i
-.nr FL 6.5i
-.ll 6.5i
-.EH '\fBX Record Extension Library, Version 1.13\fP''\fBX11, Release 6.8\fP'
-.OH '\fBX11, Release 6.8\fP''\fBX Record Extension Library, Version 1.13\fP'
-.bp 1
-.EF ''\fB\\\\n(PN\fP''
-.OF ''\fB\\\\n(PN\fP''
-.hy 14
-
-.NH 1
-Record Extension Overview
-.XS
-\*(SN Record Extension Overview
-.XE
-.LP
-The purpose
-of this extension is to support the recording and reporting of all
-core X protocol and arbitrary X extension protocol. This first section
-gives an overview of the Record extension. The following sections
-describe how to use the Record extension library.
-.NH 2
-Synchronous Playback
-.XS
-\*(SN Synchronous Playback
-.XE
-.LP
-Environment information is generally provided to an X-based playback
-mechanism, which might use the XTest extension to synthesize input events.
-This synchronization information defines the X state prior to
-event synthesis (for example, location of the cursor, window locations and
-sizes, installed colormap, window manager running, and so on) and the
-consequences that occur after the playback mechanism synthesizes
-the event. If the user moves the mouse into the icon window and
-presses and releases a mouse button, the device events
-.PN MotionNotify ,
-.PN ButtonPress ,
-and
-.PN ButtonRelease
-are generated by the X server.
-Because
-X follows an event-driven model, there are consequences that
-follow from
-the user actions, or device events, that are in the form of X protocol.
-As a result of the previous user actions, the client could
-generate requests such as
-.PN ImageText8
-and
-.PN PolyLine
-to the X server,
-or the X server could send non-device events such as
-.PN Expose
-and
-.PN MapNotify
-to the client window. Both the requests and non-device events that
-result from user actions are known as \fIconsequences\fP, which
-can be used as a synchronization, or control point, during playback.
-That is, the playback mechanism does not generate a specific synthesized
-event until its matching synchronization condition occurs (for example,
-the window is mapped or unmapped, the cursor changes, a text string
-displays, and so on)
-.LP
-Because
-it cannot be predicted what synchronization information is
-required during playback, the Record extension makes no assumptions
-about the intended use of the recorded data. Facilities exist to
-record any core X protocol or X extension protocol.
-Therefore, Record does not enforce a specific synchronization
-methodology.
-.NH 2
-Design Approach
-.XS
-\*(SN Design Approach
-.XE
-.LP
-The design approach of the extension is to record core X protocol
-and arbitrary X extension protocol entirely within the X server
-itself. When the extension has been requested to record specific
-protocol by one or more recording clients, the protocol data is formatted
-and returned to the recording clients. The extension provides a mechanism
-for capturing all events, including input device events that do not go to any
-clients.
-.NH 2
-Record Clients
-.XS
-\*(SN Record Clients
-.XE
-.LP
-The recommended
-communication model for a Record application is to open two
-connections to the server\*-one connection for recording control
-and one connection for reading recorded protocol data.
-.LP
-Information about recording (for example, what clients to record,
-what protocol to record for each client, and so on) is stored in
-resources called \fIrecord contexts\fP\^
-(type
-.PN XRecordContext ).
-Most Record extension functions take a record context as an argument.
-Although in theory it is possible
-to share record contexts between applications,
-it is expected that
-applications will use their own context when performing recording
-operations.
-.LP
-A client that wishes to record X protocol does so through the library
-functions defined in
-section 3 \*QLibrary Extension Requests\*U. A typical sequence
-of requests that a client would make is as follows:
-.Ip
-.PN XRecordQueryVersion
-\- query the extension protocol version.
-.Ip
-.PN XRecordCreateContext
-\- request that the server create a record context
-for access by this client, and express interest in clients and protocol
-to be recorded. This request returns an
-.PN XRecordContext ,
-which is an XID that is used
-by most other extension requests to identify the specified context.
-.Ip
-.PN XRecordEnableContext
-\- begin the recording and reporting of protocol
-data.
-.Ip
-.PN XRecordDisableContext
-\- end the recording and reporting of protocol data.
-.Ip
-.PN XRecordFreeContext
-\- free the record context.
-.LP
-The header for this library is
-.Pn < X11/extensions/record.h >.
-All identifiers defined in the interface are supplied by this header
-and are prefixed with \*QXRecord\*U. The
-.PN Xtst
-library contains the
-.PN XRecord
-functions.
-.NH 1
-Common Arguments
-.XS
-\*(SN What Is Recorded
-.XE
-.LP
-The Record extension functions
-.PN XRecordCreateContext
-and
-.PN XRecordRegisterClients
-allow applications to specify the following:
-.Ip
-Individual clients or sets of clients to record
-.Ip
-Ranges of core X protocol and X extension protocol to record for
-each client
-.LP
-Protocol in the ranges specified by the recording client
-will be recorded by the server. The device_events
-protocol type can be specified by a recording
-client although it may not be sent to a recorded client.
-The device_events type differs from delivered_events,
-which also can be specified by a recording client;
-delivered_events are actually delivered to one or more clients.
-These event types are discussed in section 2.3 \*QProtocol Ranges\*U.
-.LP
-The Record extension functions
-.PN XRecordCreateContext
-and
-.PN XRecordRegisterClients
-have the common arguments
-datum_flags,
-clients, and ranges, which specify
-whether server time and/or client
-sequence number should precede protocol elements,
-the clients or client set to
-record, and the protocol ranges to record, respectively.
-These are discussed in the following sections.
-.NH 2
-Datum Flags
-.LP
-The datum_flags argument is a set of flags OR'ed together to
-specify options for the record context. Specify zero to disable all
-the options.
-.LP
-The
-.PN XRecordFromServerTime
-flag specifies that
-.PN XRecordInterceptData
-structures with a category of
-.PN XRecordFromServer
-will have a server_time field specific to each
-protocol element.
-.LP
-The
-.PN XRecordFromClientTime
-flag specifies that
-.PN XRecordInterceptData
-structures with a category of
-.PN XRecordFromClient
-will have a server_time field specific to each protocol element.
-.LP
-The
-.PN XRecordFromClientSequence
-flag specifies that
-.PN XRecordInterceptData
-structures with a category of
-.PN XRecordFromClient
-or
-.PN XRecordClientDied
-will have a valid client_seq field.
-.NH 2
-Selecting Clients
-.LP
-The clients argument is a pointer to an array of
-.PN XRecordClientSpec .
-.PN XRecordClientSpec
-is an integral type that holds a resource ID,
-a client resource ID base, or one
-of the \fIclient set\fP constants defined below.
-.LP
-Duplicate
-elements in the array are ignored by the functions, and if any element
-in the array is not valid, a
-.PN "BadMatch"
-error results.
-A resource ID references the client that created that resource.
-The client set may be one of the following constants:
-.PN XRecordCurrentClients ,
-.PN XRecordFutureClients ,
-or
-.PN XRecordAllClients .
-.LP
-If the element in the array identifies a particular client, protocol
-specified by the ranges argument will be recorded by the server.
-The recorded protocol data will not be returned to the recording client
-until the record context has been enabled. This is described in section
-3.4 \*QData Transfer\*U.
-.LP
-If the element is
-.PN XRecordCurrentClients ,
-the protocol ranges specified by the
-ranges argument, except for device_events, are associated with
-each current client connection. If the element is
-.PN XRecordFutureClients ,
-the protocol ranges specified by the ranges argument are associated
-with each new client connection. If the element is
-.PN XRecordAllClients ,
-the protocol ranges specified by the ranges argument are associated
-with each current client connection and with each new client connection.
-.LP
-When the context is enabled, the data connection is unregistered if it
-was registered.
-If the context is enabled,
-.PN XRecordCurrentClients
-and
-.PN XRecordAllClients
-silently exclude the recording data connection.
-It is an error to explicitly register the data connection.
-.NH 2
-Protocol Ranges
-.LP
-The functions
-.PN XRecordCreateContext
-and
-.PN XRecordRegisterClients
-have another common argument, ranges,
-which is an array of pointers to
-.PN XRecordRange
-structures. Each structure contains ranges of numeric values for each
-of the protocol types that can be specified and recorded individually
-by the Record extension.
-An
-.PN XRecordRange
-structure must be allocated
-by the Record library using the
-.PN XRecordAllocRange
-function.
-.LP
-The
-.PN XRecordRange
-typedef is a structure with the following members:
-.LP
-.sM
-.Ds 0
-.TA .5i 3.0i
-.ta .5i 3.0i
-XRecordRange:
- XRecordRange8 core_requests /* core X requests */
- XRecordRange8 core_replies /* core X replies */
- XRecordExtRange ext_requests /* extension requests */
- XRecordExtRange ext_replies /* extension replies */
- XRecordRange8 delivered_events /* delivered core and ext events */
- XRecordRange8 device_events /* all core and ext device events */
- XRecordRange8 errors /* core X and X ext errors */
- Bool client_started /* connection setup reply from server */
- Bool client_died /* notification of client disconnect */
-.De
-.LP
-.eM
-The types used in
-.PN XRecordRange
-members are defined as follows.
-The
-.PN XRecordRange8
-typedef is a structure with the following members:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-XRecordRange8:
- unsigned char first
- unsigned char last
-.De
-.LP
-.eM
-The
-.PN XRecordRange16
-typedef is a structure with the following members:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-XRecordRange16:
- unsigned short first
- unsigned short last
-.De
-.LP
-.eM
-The
-.PN XRecordExtRange
-typedef is a structure with the following members:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-XRecordExtRange:
- XRecordRange8 ext_major
- XRecordRange16 ext_minor
-.De
-.LP
-.eM
-If any of the values specified in
-.PN XRecordRange
-is invalid, a
-.PN "BadValue"
-error results.
-.LP
-The core_requests member specifies the range of core X protocol
-requests to record. Core X protocol requests with a major opcode
-that is between first and last, inclusive, will be
-recorded. A
-.PN "BadValue"
-error results
-if the value of first is greater than the value of last.
-If the values of both first and last are zero, no core
-X protocol requests will be recorded.
-.LP
-The core_replies member specifies the range of replies resulting
-from core X protocol requests to record. Replies that result from
-core X protocol requests with a major opcode between first
-and last, inclusive, will be recorded. A
-.PN "BadValue"
-error results
-if the value of first is greater than the value of last.
-If the values of both first and last are zero,
-no core X protocol replies will be recorded.
-.LP
-The ext_requests member specifies the range of X extension
-requests to record. X extension requests with a major opcode
-between ext_major.first and ext_major.last, and with a
-minor opcode
-between ext_minor.first and ext_minor.last, inclusive, will be
-recorded. A
-.PN "BadValue"
-error results
-if the value of ext_major.first is greater than the value of
-ext_major.last or if the value of ext_minor.first is
-greater than the value of ext_minor.last. If the values of both
-ext_major.first
-and ext_major.last are zero,
-no X extension requests will be recorded.
-.LP
-The ext_replies member specifies the range of replies resulting
-from X extension requests to record. Replies that result from an X
-extension request with a major opcode between
-ext_major.first and
-ext_major.last, and a minor opcode that is between
-ext_minor.first and ext_minor.last will be recorded. A
-.PN "BadValue"
-error results
-if the value of ext_major.first is greater than the value of
-ext_major.last or if the value of ext_minor.first is greater than
-the value of ext_minor.last. If the values of both
-ext_major.first and ext_major.last
-are zero, no X extension
-replies will be recorded.
-.LP
-The delivered_events member specifies the range of both core
-X events and X extension events to record. These events are
-delivered to at least one client. Core X events and X extension events
-with a code value between first and
-last inclusive will be recorded. A
-.PN "BadValue"
-error results
-if the value of first
-is greater than the value of last. If the values of first
-and last are zero, no events will be recorded.
-.LP
-The device_events member specifies the range of
-both core X device events and X extension device events
-to record. These events may or may not be delivered to a client.
-Core X device events and X extension device events with a code value
-between first and last inclusive that are not delivered to any
-clients will be recorded. A
-.PN "BadValue"
-error results
-if the value of first
-is greater than the value of last. A
-.PN "BadValue"
-error results
-if first
-is less than two or last is less than two, except that if
-first and last are zero, no events will be
-recorded.
-.LP
-The errors member specifies the range of both core X errors and X
-extension errors to record. Core X errors and X extension errors with
-a code value between first and last inclusive will be
-recorded. A
-.PN "BadValue"
-error results
-if the value of first
-is greater than the value of last. If the values of first and
-last are zero, no errors will be recorded.
-.LP
-A value of
-.PN True
-for the client_started member specifies the
-connection setup reply from the server to new clients.
-If
-.PN False ,
-the connection setup reply is
-not specified by this
-.PN XRecordRange .
-.LP
-A value of
-.PN True
-for the client_died member specifies
-notification when a client disconnects.
-If
-.PN False ,
-notification when a client disconnects is
-not specified by this
-.PN XRecordRange .
-.NH 1
-Library Extension Requests
-.XS
-\*(SN Library Extension Requests
-.XE
-.LP
-Recording operations are accessed by programs through the use of
-new protocol requests. The following functions are provided as extensions
-to Xlib. An Xlib error results if
-an extension request is made to an X server that does not support the
-Record extension. Note that any of the extension protocol requests may generate
-.PN BadAlloc
-or
-.PN BadLength
-errors.
-.NH 2
-Query Extension Version
-.XS
-\*(SN Query Extension Version
-.XE
-.LP
-An application uses the
-.PN XRecordQueryVersion
-function to determine
-the version of the Record extension protocol supported by an X server.
-.sM
-.FD 0
-Status
-XRecordQueryVersion\^(Display *\fIdisplay\fP, int *\fIcmajor_return\fP, \
-int *\fIcminor_return\fP)
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP "\fIcmajor_return\fP" 1i
-Returns the extension protocol major version in use.
-.IP "\fIcminor_return\fP" 1i
-Returns the extension protocol minor version in use.
-.LP
-.eM
-The
-.PN XRecordQueryVersion
-function returns the major and minor
-protocol version numbers supported by the server.
-.PN XRecordQueryVersion
-returns nonzero (success) only if the returned version numbers are
-common to both the library and the
-server; otherwise, it returns zero.
-.NH 2
-Create and Modify Context
-.XS
-\*(SN Create and Modify Context
-.XE
-.LP
-An application uses the
-.PN XRecordCreateContext
-function to create a
-record context. At the time the record context is
-created by the recording client, the clients to be recorded and the
-protocol to record for each client may be specified.
-.LP
-.sM
-.FD 0
-XRecordContext
-XRecordCreateContext\^(Display *\fIdisplay\fP, int \fIdatum_flags\fP, \
-XRecordClientSpec *\fIclients\fP, int \fInclients\fP,
-.br
- XRecordRange **\fIranges\fP, int \fInranges\fP)
-.FN
-.IP "\fIdisplay\fP" 1i
-Specifies the connection to the X server.
-.IP \fIdatum_flags\fP 1i
-Specifies whether detailed time or sequence info should be sent.
-.IP "\fIclients\fP" 1i
-Specifies the clients to record.
-.IP "\fInclients\fP" 1i
-Specifies the number of clients.
-.IP "\fIranges\fP" 1i
-Specifies the protocol ranges to record.
-.IP "\fInranges\fP" 1i
-Specifies the number of protocol ranges.
-.LP
-.eM
-The
-.PN XRecordCreateContext
-function creates a record context and returns an
-.PN XRecordContext ,
-which is then used
-in the other Record library calls. This request is typically
-executed by the recording client over its control connection to
-the X server.
-The datum_flags specifies whether server time and/or client
-sequence number should precede protocol elements recorded by context
-(see section 2.1).
-When a clients element identifies
-a particular client, the client is added to the context and
-the protocol to record for that client is set to the union of
-all ranges. When a clients element is
-.PN XRecordCurrentClients ,
-.PN XRecordFutureClients ,
-or
-.PN XRecordAllClients ,
-the actions described in section 2.2 \*QSelecting Clients\*U
-are performed.
-.LP
-.PN XRecordCreateContext
-returns zero if the request failed.
-.PN XRecordCreateContext
-can generate
-.PN BadIDChoice ,
-.PN BadMatch ,
-and
-.PN BadValue
-errors.
-.LP
-The ranges argument is an
-.PN XRecordRange *
-array, that is, an array
-of pointers. The structures the elements point to shall be allocated
-by calling
-.PN XRecordAllocRange .
-.LP
-.sM
-.FD 0
-XRecordRange *
-XRecordAllocRange\^(void)
-.FN
-.LP
-.eM
-The
-.PN XRecordAllocRange
-function
-allocates and returns an
-.PN XRecordRange
-structure.
-The structure is initialized to specify no protocol.
-The function returns NULL if the structure allocation fails.
-The application can free the structure by calling
-.PN XFree .
-.NH 3
-Additions
-.LP
-An application uses the
-.PN XRecordRegisterClients
-function to modify a previously created
-record context, by adding clients or modifying the recorded protocol,
-typically over its control connection to the X server.
-.LP
-.sM
-.FD 0
-Status
-XRecordRegisterClients\^(Display *\fIdisplay\fP, XRecordContext \fIcontext\fP, \
-int \fIdatum_flags\fP,
-.br
- XRecordClientSpec *\fIclients\fP, int \fInclients\fP, \
-XRecordRange **\fIranges\fP, int \fInranges\fP)
-.FN
-.IP "\fIdisplay\fP " 1i
-Specifies the connection to the X server.
-.IP "\fIcontext\fP" 1i
-Specifies the record context to modify.
-.IP \fIdatum_flags\fP 1i
-Specifies whether detailed time or sequence info should be sent.
-.IP "\fIclients\fP" 1i
-Specifies the clients to record.
-.IP "\fInclients\fP" 1i
-Specifies the number of clients.
-.IP "\fIranges\fP" 1i
-Specifies the protocol ranges to record.
-.IP "\fInranges\fP" 1i
-Specifies the number of protocol ranges.
-.LP
-.eM
-The datum_flags specifies whether server time and/or client
-sequence number should precede protocol elements
-for all clients
-recorded by context
-(see section 2.1).
-When a clients element identifies a particular client and the
-client is not yet
-targeted for recording in the given context,
-the client is added to the set of clients to record, and the protocol
-to record for that client is set to the union of all ranges.
-When the client is
-already targeted for recording, the protocol to record for that client
-is set to the union of all ranges. When the element is
-.PN XRecordCurrentClients ,
-.PN XRecordFutureClients ,
-or
-.PN XRecordAllClients ,
-the actions described
-in section 2.2 \*QSelecting Clients\*U
-are performed.
-.LP
-.PN XRecordRegisterClients
-returns zero if the request failed; otherwise, it
-returns nonzero.
-.LP
-.PN XRecordRegisterClients
-can generate
-.PN XRecordBadContext ,
-.PN BadMatch ,
-and
-.PN BadValue
-errors.
-.NH 3
-Deletions
-.LP
-An application uses
-the
-.PN XRecordUnregisterClients
-function to delete clients from a
-previously created
-record context, typically over its control connection to the X server.
-.LP
-.sM
-.FD 0
-Status
-XRecordUnregisterClients\^(Display *\fIdisplay\fP, XRecordContext \fIcontext\fP, \
-RecordClientSpec *\fIclients\fP,
-.br
- int \fInclients\fP\^)
-.FN
-.IP "\fIdisplay\fP " 1i
-Specifies the connection to the X server.
-.IP "\fIcontext\fP" 1i
-Specifies the record context to modify.
-.IP "\fIclients\fP" 1i
-Specifies the clients to stop recording.
-.IP "\fInclients\fP" 1i
-Specifies the number of clients.
-.LP
-.eM
-When an element in clients identifies a particular client, and the
-specified client is already targeted for recording in the given
-context, the client and the set of protocol to record for that
-client are deleted from the context. If the specified client is not
-targeted for recording, then no action is performed.
-.LP
-When the element is
-.PN XRecordCurrentClients ,
-all clients currently targeted
-for recording in context and their corresponding sets of
-protocol to record are deleted from context.
-.LP
-When the item is
-.PN XRecordFutureClients ,
-any future client connections will
-not automatically be targeted for recording in context.
-.LP
-When the element is
-.PN XRecordAllClients ,
-all clients currently targeted
-for recording in context and their corresponding sets of
-protocol to record are deleted from context. Any future
-client connections will not automatically be targeted for recording
-in context.
-.LP
-.PN XRecordUnregisterClients
-returns zero if the request failed; otherwise,
-it returns nonzero.
-.LP
-.PN XRecordUnregisterClients
-can generate
-.PN XRecordBadContext ,
-.PN BadMatch ,
-and
-.PN BadValue
-errors.
-.NH 2
-Query Context State
-.XS
-\*(SN Query Context State
-.XE
-.LP
-An application uses the
-.PN XRecordGetContext
-function to query the
-current state of a record context, typically over its control connection
-to the X server.
-.LP
-.sM
-.FD 0
-Status
-XRecordGetContext\^(Display *\fIdisplay\fP, XRecordContext \fIcontext\fP, \
- XRecordState **\fIstate_return\fP)
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP "\fIcontext\fP" 1i
-Specifies the record context to query.
-.IP "\fIstate_return\fP" 1i
-Specifies the address of a variable into which the function stores a
-pointer to the current state of the record context.
-.LP
-.eM
-The
-.PN XRecordState
-typedef returned by
-.PN XRecordGetContext
-is a structure
-with the following members:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-XRecordState:
- Bool enabled
- int datum_flags
- unsigned long nclients
- XRecordClientInfo **client_info
-.De
-.LP
-.eM
-The enabled member is set to the state of data transfer and is
-.PN True
-when the recording client has asked that recorded data be sent;
-otherwise it is
-.PN False .
-The datum_flags member is set to the value of these flags for
-this context.
-The nclients member is set to the
-number of
-.PN XRecordClientInfo
-structures returned. The client_info member
-is an array of pointers to
-.PN XRecordClientInfo
-structures that contain
-the protocol
-to record for each targeted client.
-The
-.PN XRecordClientInfo
-typedef is a structure with the following members:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-XRecordClientInfo:
- XRecordClientSpec client
- unsigned long nranges
- XRecordRange **ranges
-.De
-.LP
-.eM
-The client member either identifies a client targeted for recording
-or is set to
-.PN XRecordFutureClients
-to describe how future clients
-will be automatically targeted for recording.
-The nranges member is set to the number of protocol
-ranges to be recorded for the specified client. The ranges member
-is an array of pointers to
-.PN XRecordRange
-structures, which specify the
-protocol ranges to record.
-.LP
-.PN XRecordGetContext
-returns zero if the request failed; otherwise, it
-returns nonzero.
-The context argument must specify a valid
-.PN XRecordContext
-or a
-.PN XRecordBadContext
-error results.
-.LP
-Recording clients should use the
-.PN XRecordFreeState
-function to free the state data returned by
-.PN XRecordGetContext .
-.LP
-.sM
-.FD 0
-void
-XRecordFreeState\^(XRecordState *\fIstate\fP)
-.FN
-.IP "\fIstate\fP" 1i
-Specifies the structure that is to be freed.
-.LP
-.eM
-.PN XRecordFreeState
-frees the data pointed to by state.
-If the argument does not match an
-.PN XRecordState
-pointer
-returned from a successful call to
-.PN XRecordGetContext ,
-or if
-.PN XRecordFreeState
-has already been
-called with it, the behavior is undefined.
-.NH 2
-Data Transfer
-.XS
-\*(SN Data Transfer
-.XE
-.LP
-An application uses the
-.PN XRecordEnableContext
-and
-.PN XRecordDisableContext
-functions to change the state of data transfer
-between the X server and the recording client. These functions allow
-the application to start recording and reporting of protocol data
-and to stop recording and reporting of protocol data, respectively.
-.NH 3
-Enable Context
-.XS
-\*(SN Enable Context
-.XE
-.LP
-To direct the X server to record and report protocol, a program
-uses
-.PN XRecordEnableContext ,
-typically over its data connection to the X
-server. The reporting of recorded protocol back to the recording client
-is handled by the following data structures and procedure definitions.
-Each recorded protocol element is reported
-to the recording client through an
-.PN XRecordInterceptData
-typedef,
-a structure with the following members:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .25i
-XRecordInterceptData:
- XID id_base
- Time server_time
- unsigned long client_seq
- int category
- Bool client_swapped
- unsigned char *data
- unsigned long data_len
-.De
-.LP
-.eM
-The id_base member is set to the resource identifier base sent to the
-client in the connection setup reply and therefore identifies the client
-being recorded, except when the recorded protocol data is a device
-event that may have not been delivered to a client. In this case,
-id_base is set to zero. The server_time member
-is set to the time of the server when the protocol was recorded.
-It is the time that was attached to this protocol element in the reply,
-if so specified by datum_flags,
-or else the time from the header of the reply that contained
-this protocol element.
-The client_seq member is the sequence number of the recorded
-client's most recent request processed by the server at the time this
-protocol element was recorded, if this information were included in the
-recorded data; otherwise client_seq is 0.
-The category member is set to one of the following values:
-.PN XRecordStartOfData ,
-.PN XRecordFromServer ,
-.PN XRecordFromClient ,
-.PN XRecordClientStarted ,
-.PN XRecordClientDied ,
-or
-.PN XRecordEndOfData .
-.PN XRecordStartOfData
-is immediately sent as the first reply to confirm
-that the context is enabled.
-.PN XRecordFromClient
-indicates the protocol
-data is from the recorded client to the server (requests).
-.PN XRecordFromServer
-indicates the protocol data is from the server to the recorded client
-(replies, errors, events, or device events).
-.PN XRecordClientStarted
-indicates that the protocol data is the
-connection setup reply from the server.
-.PN XRecordClientDied
-indicates that the recorded
-client has closed its connection
-to the X server; there is no protocol data.
-.PN XRecordEndOfData
-indicates that the context has been disabled and that
-this is the last datum. It does not correspond to any protocol or
-state change in a recorded client. There is no protocol data.
-.LP
-The client_swapped member is set to
-.PN True
-if the byte order of the client being recorded is swapped relative to
-the recording client; otherwise, it is set to
-.PN False .
-All
-recorded protocol data is returned in the byte order of the recorded
-client. Therefore, recording clients are responsible for all byte swapping,
-if required.
-Device events are in the byte order of the
-recording client.
-For replies of category
-.PN XRecordStartOfData
-and
-.PN XRecordEndOfData ,
-client_swapped is set
-according
-to the byte order of the server relative to the recording client.
-.LP
-The data member contains the actual recorded
-protocol data.
-When category is set to
-.PN XRecordStartOfData ,
-.PN XRecordClientDied ,
-or
-.PN XRecordEndOfData ,
-no protocol
-data are contained in data.
-.\"
-.LP
-.\" copied exactly from the protocol document
-For the core X events
-.PN KeyPress ,
-.PN KeyRelease ,
-.PN ButtonPress ,
-and
-.PN ButtonRelease ,
-the fields of a device event that contain
-valid information are time and detail.
-For the core X event
-.PN MotionNotify ,
-the fields of a device event that contain
-valid information are time, root,
-root-x and root-y.
-The time field refers to the time the event was generated by the
-device.
-.LP
-For the extension input device events
-.PN DeviceKeyPress ,
-.PN DeviceKeyRelease ,
-.PN DeviceButtonPress ,
-and
-.PN DeviceButtonRelease ,
-the fields of a device event that contain valid information are
-device, time, and detail.
-For
-.PN DeviceMotionNotify ,
-the valid device event fields are
-device and time.
-For the extension input device events
-.PN ProximityIn
-and
-.PN ProximityOut ,
-the fields of a device event that contain valid
-information are device and time.
-For the extension input device event
-.PN DeviceValuator ,
-the fields of a device event that contain valid information are
-device,
-num_valuators, first_valuator, and valuators.
-The time field refers to the time the event was generated by the
-device.
-.\"
-.LP
-The data_len member is set to the
-length of the actual recorded protocol data in 4-byte units.
-.LP
-When the context has been enabled, protocol data the recording client has
-previously expressed interest in is recorded and returned to the
-recording client via multiple replies.
-Because
-the X server batches
-the recorded data, more than one protocol element may be contained
-in the same reply packet.
-When a reply is received, a procedure of type
-.PN XRecordInterceptProc
-is
-called for each protocol
-element in the reply.
-.LP
-.sM
-.FD 0
-typedef void\^(*XRecordInterceptProc)
-.br
- (XPointer \fIclosure\fP, XRecordInterceptData *\fIrecorded_data\fP)
-.FN
-.IP "\fIclosure\fP" 1i
-Pointer that was passed in when the context was enabled.
-.IP "\fIrecorded_data\fP" 1i
-A protocol element recorded by the server extension.
-.LP
-.eM
-This callback
-may use the control display connection (or any display connection
-other than the data connection).
-.LP
-Recording clients should use the
-.PN XRecordFreeData
-function
-to free the
-.PN XRecordInterceptData
-structure.
-.LP
-.sM
-.FD 0
-Status
-XRecordEnableContext\^(Display *\fIdisplay\fP, XRecordContext \fIcontext\fP, \
-XRecordInterceptProc \fIcallback\fP,
-.br
- XPointer \fIclosure\fP)
-.FN
-.IP "\fIdisplay\fP" 1i
-Specifies the connection to the X server.
-.IP "\fIcontext\fP" 1i
-Specifies the record context to enable.
-.IP "\fIcallback\fP" 1i
-Specifies the function to be called for each protocol element received.
-.IP "\fIclosure\fP" 1i
-Specifies data passed to \fIcallback.\fP
-.LP
-.eM
-.PN XRecordEnableContext
-enables data transfer between the recording client and
-the X server. All core and extension protocol received from or sent to
-targeted clients that the recording client has expressed
-interest in will be recorded and reported to the recording client.
-.LP
-.PN XRecordEnableContext
-returns zero if the request failed; otherwise, it
-returns nonzero. The context argument must specify a valid
-.PN XRecordContext
-or a
-.PN XRecordBadContext
-error results. The error
-.PN BadMatch
-results when data transfer is already enabled
-on the given context.
-.NH 3
-Enable Context Asynchronously
-.XS
-\*(SN Enable Context Asynchronously
-.XE
-.LP
-Because
-.PN XRecordEnableContext
-does not return until
-.PN XRecordDisableContext
-is executed on the control connection, a nonblocking interface in
-addition to
-.PN XRecordEnableContext
-is provided. This interface also
-enables data transfer; however, it does not block.
-.LP
-This interface is defined as follows:
-.LP
-.sM
-.FD 0
-Status
-XRecordEnableContextAsync\^(Display *\fIdisplay\fP, XRecordContext \fIcontext\fP,
-.br
- XRecordInterceptProc \fIcallback\fP, XPointer \fIclosure\fP)
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIcontext\fP 1i
-Specifies the record context to enable.
-.IP \fIcallback\fP 1i
-Specifies the function to be called for each protocol element received.
-.IP \fIclosure\fP 1i
-Data passed to \fIcallback\fP.
-.LP
-.eM
-.PN XRecordEnableContextAsync
-enables data transfer between the recording
-client and the X server just as
-.PN XRecordEnableContext
-does.
-Unlike
-.PN XRecordEnableContext ,
-it does not wait for the context to be disabled
-before returning;
-.PN XRecordEnableContextAsync
-returns as soon as the
-.PN XRecordStartOfData
-reply has been received and processed.
-.LP
-.PN XRecordEnableContextAsync
-returns zero if it could not allocate the
-necessary memory and nonzero if it sent the request successfully to
-the server. The context argument must specify a valid
-.PN XRecordContext
-or a
-.PN XRecordBadContext
-error results. The error
-.PN BadMatch
-results when data transfer is already enabled.
-.LP
-Each time it reads data from the server connection, Xlib will check
-for incoming replies and call \fIcallback\fP as necessary. The
-application may direct Xlib explicitly to check for Record data with
-the
-.PN XRecordProcessReplies
-function.
-.LP
-.sM
-.FD 0
-void
-XRecordProcessReplies\^(Display *\fIdisplay\fP)
-.FN
-.IP \fIdisplay\fP 11
-Specifies the connection to the X server.
-.LP
-.eM
-.PN XRecordProcessReplies
-will check for any replies that have not yet
-been processed by the application. The asynchronous callback will be called
-as appropriate.
-.PN XRecordProcessReplies
-returns when all immediately
-available replies have been processed. It does not block.
-.LP
-.sp
-To free the data passed to the
-.PN XRecordInterceptProc
-callback,
-use
-.PN XRecordFreeData .
-.LP
-.sM
-.FD 0
-void
-XRecordFreeData\^(XRecordInterceptData *\fIdata\fP)
-.FN
-.IP "\fIdata\fP" 1i
-Specifies the structure that is to be freed.
-.LP
-.eM
-.PN XRecordFreeData
-frees the data pointed to by data.
-If the argument does not match an
-.PN XRecordInterceptData
-pointer earlier
-passed to an
-.PN XRecordInterceptProc
-callback or if
-.PN XRecordFreeData
-has
-already been called with it, the behavior is undefined.
-.NH 3
-Disable Context
-.XS
-\*(SN Disable Context
-.XE
-.LP
-To direct the X server to halt the reporting of recorded protocol, the
-program executes
-.PN XRecordDisableContext ,
-typically over its
-control connection to the X server.
-.LP
-.sM
-.FD 0
-Status
-XRecordDisableContext\^(Display *\fIdisplay\fP, XRecordContext \fIcontext\fP)
-.FN
-.IP "\fIdisplay\fP" 1i
-Specifies the connection to the X server.
-.IP "\fIcontext\fP" 1i
-Specifies the record context to disable.
-.LP
-.eM
-The
-.PN XRecordDisableContext
-function disables context, stopping
-all recording over its data connection.
-Any complete protocol elements for context
-that were buffered in the server will be sent to the
-recording client rather than being discarded.
-If a program attempts to disable an
-.PN XRecordContext
-that has not been enabled, no action will take place.
-.LP
-.PN XRecordDisableContext
-returns zero if the request failed; otherwise, it
-returns nonzero. The context argument must specify a valid
-.PN XRecordContext
-or an
-.PN XRecordBadContext
-error results.
-.NH 2
-ID Base Mask
-.XS
-\*(SN ID Base Mask
-.XE
-.LP
-To determine the mask the server uses for the client ID base, use
-.PN XRecordIdBaseMask .
-.LP
-.sM
-.FD 0
-XID
-XRecordIdBaseMask\^(Display *\fIdisplay\fP)
-.FN
-.IP "\fIdisplay\fP" 1i
-Specifies the connection to the X server.
-.LP
-.eM
-The
-.PN XRecordIdBaseMask
-function returns the resource ID mask passed to the client by the
-server at connection setup.
-.NH 2
-Free Context
-.XS
-\*(SN Free Context
-.XE
-.LP
-Before terminating, the program should request that the server
-free the record context. This is done with the
-.PN XRecordFreeContext
-function, typically over the record client's control connection
-to the X server.
-.LP
-.sM
-.FD 0
-Status
-XRecordFreeContext\^(Display *\fIdisplay\fP, XRecordContext \fIcontext\fP)
-.FN
-.IP "\fIdisplay\fP" 1i
-Specifies the connection to the X server.
-.IP "\fIcontext\fP" 1i
-Specifies the record context to free.
-.LP
-.eM
-The
-.PN XRecordFreeContext
-function frees the given context for the
-requesting client. Freeing a record context releases the clients
-targeted for recording and their respective protocol ranges to
-record. If protocol data is being reported to the recording client,
-generally over the data connection to the X server, the reporting
-ceases as if
-.PN XRecordDisableContext
-had been called on the given context.
-When a program terminates without freeing
-its record context, the X server will automatically free that context
-on behalf of the client.
-.LP
-.PN XRecordFreeContext
-returns zero if the request failed; otherwise,it
-returns nonzero. The context argument must specify a valid
-.PN XRecordContext
-or a
-.PN XRecordBadContext
-error results.
-.\"
-.\" Local Variables:
-.\" time-stamp-start: "^\\.ds Ts "
-.\" time-stamp-end: "\\\\\""
-.\" time-stamp-format: "%d %3b %y (%H:%02M)"
-.\" End:
diff --git a/specs/xtestlib.ms b/specs/xtestlib.ms
deleted file mode 100644
index 9ccdfef..0000000
--- a/specs/xtestlib.ms
+++ /dev/null
@@ -1,446 +0,0 @@
-.\" Use -ms and macros.t
-.\" edited for DP edits and code consistency w/ core protocol/xlib 4/2/96
-.\" $Xorg: xtestlib.ms,v 1.3 2000/08/17 19:42:37 cpqbld Exp $
-.de lP
-.ne 8
-.LP
-..
-.EH ''''
-.OH ''''
-.EF ''''
-.OF ''''
-.ps 10
-.nr PS 10
-\&
-.sp 8
-.ce 1
-\s+2\fBXTEST Extension Library\fP\s-2
-.sp 3
-.ce 3
-Version 2.2
-X Consortium Standard
-.sp 6
-.ce 4
-\s-1Kieron Drake
-.sp 6p
-UniSoft Ltd.\s+1
-.bp
-.sp 10
-.ps 9
-.nr PS 9
-.sp 8
-.lP
-Copyright \(co 1992 by UniSoft Group Ltd.
-.lP
-Permission to use, copy, modify, and distribute this documentation for any
-purpose and without fee is hereby granted, provided that the above copyright
-notice and this permission notice appear in all copies. UniSoft makes no
-representations about the suitability for any purpose of the information in
-this document. This documentation is provided ``as is'' without express or
-implied warranty.
-.lP
-.sp 5
-Copyright \(co 1992, 1994 X Consortium
-.lP
-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
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-.lP
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-.lP
-THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-.lP
-Except as contained in this notice, the name of the X Consortium shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from the X Consortium.
-.ps 10
-.nr PS 10
-.bp 1
-.EH ''XTEST Extension Library''
-.OH ''XTEST Extension Library''
-.EF ''\fB % \fP''
-.OF ''\fB % \fP''
-.NH 1
-Overview
-.lP
-This extension is a minimal set of client and server extensions
-required to completely test the X11 server with no user intervention.
-.lP
-This extension is not intended to support general journaling and
-playback of user actions. This is a difficult area [XTrap, 89] as it attempts
-to synchronize synthetic user interactions with their effects; it is at the
-higher level of dialogue recording/playback rather than at the strictly lexical
-level. We are interested only in the latter, simpler, case. A more detailed
-discussion and justification of the extension functionality is given in
-[Drake, 91].
-.lP
-We are aiming only to provide a minimum set of facilities that
-solve immediate testing and validation problems. The testing extension
-itself needs testing, where possible, and so should be as simple as possible.
-.lP
-We have also tried to:
-.IP \(bu 5
-Confine the extension to an appropriate high level within the server
-to minimize portability problems. In practice this means that the extension
-should be at the DIX level or use the DIX/DDX interface, or both. This
-has effects, in particular, on the level at which \*Qinput synthesis\*U
-can occur.
-.IP \(bu 5
-Minimize the changes required in the rest of the server.
-.IP \(bu 5
-Minimize performance penalties on normal server operation.
-.lP
-.NH 1
-Description
-.lP
-The functions provided by this extension fall into two groups:
-.IP "\fBClient Operations\fP" .5i
-These routines manipulate otherwise hidden client-side behavior. The
-actual implementation will depend on the details of the actual language
-binding and what degree of request buffering, GContext caching, and so on, is
-provided. In the C binding, defined in section 7, routines are provided
-to access the internals of two opaque data structures
-.Pn \*- GC s
-and
-.PN Visual s\*-
-and to discard any requests pending within the
-output buffer of a connection. The exact details can be expected to differ for
-other language bindings.
-.IP "\fBServer Requests\fP" .5i
-The first of these requests is similar to that provided in most
-extensions: it allows a client to specify a major and minor version
-number to the server and for the server to respond with major and minor
-versions of its own. The remaining two requests allow the following:
-.RS
-.IP \(bu 5
-Access to an otherwise \*Qwrite-only\*U server resource: the cursor
-associated with a given window
-.IP \(bu 5
-Perhaps most importantly, limited synthesis of input device events,
-almost as if a cooperative user had moved the pointing device
-or pressed a key or button.
-.RE
-.NH 1
-C Language Binding
-.lP
-The C functions either
-provide direct access to the protocol and add no additional
-semantics to those
-defined in section 5 or they correspond directly to the abstract descriptions
-of client operations in section 4.
-.lP
-All XTEST extension functions and procedures, and all manifest
-constants and macros, will start with the string \*QXTest\*U.
-All operations are classified as
-server/client (Server) or client-only (Client).
-All routines that have return type Status will return nonzero for
-\*Qsuccess\*U and zero for \*Qfailure.\*U Even if the XTEST extension is
-supported, the server may withdraw such facilities arbitrarily; in which case
-they will subsequently return zero.
-.lP
-The include file for this extension is
-.Pn < X11/extensions/XTest.h >.
-.LP
-.sM
-.FD 0
-Bool
-XTestQueryExtension(\fIdisplay\fP\^, \fIevent_base\fP\^, \fIerror_base\fP\^, \
-\fImajor_version\fP\^, \fIminor_version\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- int *\fIevent_base\fP\^; /* RETURN */
-.br
- int *\fIerror_base\fP\^; /* RETURN */
-.br
- int *\fImajor_version\fP\^; /* RETURN */
-.br
- int *\fIminor_version\fP\^; /* RETURN */
-.FN
-.LP
-.eM
-.PN XTestQueryExtension
-returns
-.PN True
-if the specified display supports the XTEST extension, else
-.PN False .
-If the extension is supported, *event_base would be set to the event number for
-the first event for this extension and
-*error_base would be set to the error number for the first error for
-this extension. As no errors or events are defined for this version of the extension,
-the values returned here are not defined (nor useful).
-If the extension is supported, *major_version and *minor_version are set to
-the major and minor version numbers of the extension supported by the
-display. Otherwise, none of the arguments are set.
-.sp
-.LP
-.sM
-.FD 0
-Bool
-XTestCompareCursorWithWindow(\fIdisplay\fP\^, \fIwindow\fP\^, \fIcursor\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- Window \fIwindow\fP\^;
-.br
- Cursor \fIcursor\fP\^;
-.FN
-.LP
-.eM
-If the extension is supported,
-.PN XTestCompareCursorWithWindow
-performs a comparison of the cursor
-whose ID is specified by cursor (which may be
-.PN None )
-with the cursor of the window specified by window returning
-.PN True
-if they are the same and
-.PN False
-otherwise.
-If the extension is not supported, then the request is ignored and
-zero is returned.
-.sp
-.LP
-.sM
-.FD 0
-Bool
-XTestCompareCurrentCursorWithWindow(\fIdisplay\fP\^, \fIwindow\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- Window \fIwindow\fP\^;
-.FN
-.LP
-.eM
-If the extension is supported,
-.PN XTestCompareCurrentCursorWithWindow
-performs a comparison of the current cursor
-with the cursor of the specified window returning
-.PN True
-if they are the same and
-.PN False
-otherwise.
-If the extension is not supported, then the request is ignored and
-zero is returned.
-.sp
-.LP
-.sM
-.FD 0
-XTestFakeKeyEvent(\fIdisplay\fP\^, \fIkeycode\fP\^, \fIis_press\fP\^, \fIdelay\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- unsigned int \fIkeycode\fP\^;
-.br
- Bool \fIis_press\fP\^;
-.br
- unsigned long \fIdelay\fP\^;
-.FN
-.LP
-.eM
-If the extension is supported,
-.PN XTestFakeKeyEvent
-requests the server to simulate either a
-.PN KeyPress
-(if is_press is
-.PN True )
-or a
-.PN KeyRelease
-(if is_press is
-.PN False )
-of the key with the specified keycode;
-otherwise, the request is ignored.
-.LP
-If the extension is supported,
-the simulated event will not be processed until delay milliseconds
-after the request is received (if delay is
-.PN CurrentTime ,
-then this is interpreted as no delay at all). No other requests from
-this client will be processed until this delay, if any, has expired
-and subsequent processing of the simulated event has been completed.
-.sp
-.LP
-.sM
-.FD 0
-XTestFakeButtonEvent(\fIdisplay\fP\^, \fIbutton\fP\^, \fIis_press\fP\^, \fIdelay\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- unsigned int \fIbutton\fP\^;
-.br
- Bool \fIis_press\fP\^;
-.br
- unsigned long \fIdelay\fP\^;
-.FN
-.LP
-.eM
-If the extension is supported,
-.PN XTestFakeButtonEvent
-requests the server to simulate either
-a
-.PN ButtonPress
-(if is_press is
-.PN True )
-or a
-.PN ButtonRelease
-(if is_press is
-.PN False )
-of the logical button numbered by the specified button;
-otherwise, the request is ignored.
-.LP
-If the extension is supported,
-the simulated event will not be processed until delay milliseconds
-after the request is received (if delay is
-.PN CurrentTime ,
-then this is interpreted as no delay at all). No other requests from
-this client will be processed until this delay, if any, has expired
-and subsequent processing of the simulated event has been completed.
-.sp
-.LP
-.sM
-.FD 0
-XTestFakeMotionEvent(\fIdisplay\fP\^, \fIscreen_number\fP\^, \fIx\fP\^, \
-\fIy\fP\^, \fIdelay\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- int \fIscreen_number\fP\^;
-.br
- int \fIx\fP\^ \fIy\fP\^;
-.br
- unsigned long \fIdelay\fP\^;
-.FN
-.LP
-.eM
-If the extension is supported,
-.PN XTestFakeMotionEvent
-requests the server to simulate
-a movement of the pointer to the specified position (x, y) on the
-root window of screen_number;
-otherwise, the request is ignored. If screen_number is -1, the
-current screen (that the pointer is on) is used.
-.LP
-If the extension is supported,
-the simulated event will not be processed until delay milliseconds
-after the request is received (if delay is
-.PN CurrentTime ,
-then this is interpreted as no delay at all). No other requests from
-this client will be processed until this delay, if any, has expired
-and subsequent processing of the simulated event has been completed.
-.sp
-.LP
-.sM
-.FD 0
-XTestFakeRelativeMotionEvent(\fIdisplay\fP\^, \fIscreen_number\fP\^, \
-\fIx\fP\^, \fIy\fP\^, \fIdelay\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- int \fIscreen_number\fP\^;
-.br
- int \fIx\fP\^ \fIy\fP\^;
-.br
- unsigned long \fIdelay\fP\^;
-.FN
-.LP
-.eM
-If the extension is supported,
-.PN XTestFakeRelativeMotionEvent
-requests the server to simulate
-a movement of the pointer by the specified offsets (x, y) relative
-to the current pointer position on screen_number;
-otherwise, the request is ignored. If screen_number is -1, the
-current screen (that the pointer is on) is used.
-.LP
-If the extension is supported,
-the simulated event will not be processed until delay milliseconds
-after the request is received (if delay is
-.PN CurrentTime ,
-then this is interpreted as no delay at all). No other requests from
-this client will be processed until this delay, if any, has expired
-and subsequent processing of the simulated event has been completed.
-.sp
-.LP
-.sM
-.FD 0
-XTestGrabControl(\fIdisplay\fP\^, \fIimpervious\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- Bool \fIimpervious\fP\^;
-.FN
-.LP
-.eM
-If impervious is
-.PN True ,
-then the executing client becomes impervious to server grabs.
-If impervious is
-.PN False ,
-then the executing client returns to the normal state of being
-susceptible to server grabs.
-.sp
-.LP
-.sM
-.FD 0
-Bool
-XTestSetGContextOfGC(\fIgc\fP\^, \fIgid\fP\^)
-.br
- GC \fIgc\fP\^;
-.br
- GContext \fIgid\fP\^;
-.FN
-.LP
-.eM
-.PN XTestSetGContextOfGC
-sets the GContext within the opaque datatype referenced by gc to
-be that specified by gid.
-.sp
-.LP
-.sM
-.FD 0
-XTestSetVisualIDOfVisual(\fIvisual\fP\^, \fIvisualid\fP\^)
-.br
- Visual *\fIvisual\fP\^;
-.br
- VisualID \fIvisualid\fP\^;
-.FN
-.LP
-.eM
-.PN XTestSetVisualIDOfVisual
-sets the VisualID within the opaque datatype referenced by visual to
-be that specified by visualid.
-.sp
-.LP
-.sM
-.FD 0
-Bool
-XTestDiscard(\fIdisplay\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.FN
-.LP
-.eM
-.PN XTestDiscard
-discards any requests within the output buffer for the specified display.
-It returns
-.PN True
-if any requests were discarded; otherwise, it returns
-.PN False .
-.NH 1
-References
-.XP
-Annicchiarico, D., et al., \fIXTrap: The XTrap Architecture\fP\^.
-Digital Equipment Corporation, July 1991.
-.XP
-Drake, K. J., \fISome Proposals for a Minimum X11 Testing Extension\fP\^.
-UniSoft Ltd., June 1991.
-.LP
diff --git a/specs/xtestlib.xml b/specs/xtestlib.xml
new file mode 100644
index 0000000..ab41656
--- /dev/null
+++ b/specs/xtestlib.xml
@@ -0,0 +1,468 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+
+
+<!-- lifted from troff+ms+XMan by doclifter -->
+<book id="xtestlib">
+
+<bookinfo>
+ <title>XTEST Extension Library</title>
+ <subtitle>X Consortium Standard</subtitle>
+ <releaseinfo>X Version 11, Release 6.4</releaseinfo>
+ <authorgroup>
+ <author>
+ <firstname>Kieron</firstname><surname>Drake</surname>
+ </author>
+ </authorgroup>
+ <corpname>UniSoft Ltd.</corpname>
+ <copyright><year>1992</year><holder>UniSoft Group Ltd.</holder></copyright>
+ <copyright><year>1992</year><holder>X Consortium</holder></copyright>
+ <copyright><year>1994</year><holder>X Consortium</holder></copyright>
+ <releaseinfo>Version 2.2</releaseinfo>
+ <affiliation><orgname>X Consortium</orgname></affiliation>
+ <productnumber>X Version 11, Release 7</productnumber>
+
+<legalnotice>
+
+<para>
+Permission to use, copy, modify, and distribute this documentation for
+any purpose and without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies. UniSoft
+makes no representations about the suitability for any purpose of the
+information in this document. This documentation is provided
+&ldquo;as is&rdquo; without express or implied warranty.
+</para>
+
+<para>
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files
+(the &ldquo;Software&rdquo;), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to permit
+persons to whom the Software is furnished to do so, subject to the following
+conditions:
+</para>
+
+<para>
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+</para>
+
+<para>
+THE SOFTWARE IS PROVIDED &ldquo;AS IS&rdquo;, WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+</para>
+
+<para>
+Except as contained in this notice, the name of the X Consortium shall not
+be used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from the X Consortium.
+</para>
+
+<para>X Window System is a trademark of The Open Group.</para>
+
+<para>
+Except as contained in this notice, the name of the X Consortium shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from the X Consortium.
+</para>
+</legalnotice>
+</bookinfo>
+
+<chapter id='overview'>
+<title>Overview</title>
+
+<para>
+This extension is a minimal set of client and server extensions
+required to completely test the X11 server with no user intervention.
+</para>
+
+<para>
+This extension is not intended to support general journaling and
+playback of user actions. This is a difficult area [XTrap, 89] as it attempts
+to synchronize synthetic user interactions with their effects; it is at the
+higher level of dialogue recording/playback rather than at the strictly lexical
+level. We are interested only in the latter, simpler, case. A more detailed
+discussion and justification of the extension functionality is given in
+[Drake, 91].
+</para>
+
+<para>
+We are aiming only to provide a minimum set of facilities that
+solve immediate testing and validation problems. The testing extension
+itself needs testing, where possible, and so should be as simple as possible.
+</para>
+
+<para>We have also tried to:</para>
+<itemizedlist mark='bullet'>
+ <listitem>
+ <para>
+Confine the extension to an appropriate high level
+within the server to minimize portability problems. In practice this
+means that the extension should be at the DIX level or use the
+DIX/DDX interface, or both. This has effects, in particular, on the
+level at which "input synthesis" can occur.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Minimize the changes required in the rest of the server.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Minimize performance penalties on normal server operation.
+ </para>
+ </listitem>
+</itemizedlist>
+</chapter>
+
+<chapter id='description'>
+<title>Description</title>
+
+<para>The functions provided by this extension fall into two groups:</para>
+
+<itemizedlist>
+ <listitem>
+ <para>Client Operations</para>
+ <para>
+These routines manipulate otherwise hidden client-side behavior.
+The actual implementation will depend on the details of the actual language
+binding and what degree of request buffering, GContext caching, and so on, is
+provided. In the C binding, defined in section 7, routines are provided
+to access the internals of two opaque data structures -
+<symbol role='Pn'>GC</symbol>s
+and
+<function>Visual</function>s - and to discard any requests pending within the
+output buffer of a connection. The exact details can be expected to differ for
+other language bindings.
+ </para>
+ </listitem>
+ <listitem>
+ <para>Server Requests</para>
+ <para>
+The first of these requests is similar to that provided in most
+extensions: it allows a client to specify a major and minor version
+number to the server and for the server to respond with major and minor
+versions of its own. The remaining two requests allow the following:
+ </para>
+ </listitem>
+ <listitem>
+ <itemizedlist>
+ <listitem>
+ <para>
+Access to an otherwise "write-only" server resource: the
+cursor associated with a given window
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Perhaps most importantly, limited synthesis of input
+device events, almost as if a cooperative user had moved the pointing device
+or pressed a key or button.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+</itemizedlist>
+</chapter>
+
+<chapter id='c_language_binding'>
+<title>C Language Binding</title>
+
+<para>
+The C functions either provide direct access to the protocol and add no
+additional semantics to those defined in section 5 or they correspond
+directly to the abstract descriptions of client operations in section 4.
+</para>
+
+<para>
+All XTEST extension functions and procedures, and all manifest constants
+and macros, will start with the string "XTest". All operations are
+classified as server/client (Server) or client-only (Client).
+All routines that have return type Status will return nonzero for
+"success" and zero for "failure." Even if the XTEST extension is
+supported, the server may withdraw such facilities arbitrarily; in which case
+they will subsequently return zero.
+</para>
+
+<para>
+The include file for this extension is
+&lt;<symbol role='Pn'>X11/extensions/XTest.h</symbol>&gt;.
+</para>
+
+<funcsynopsis>
+<funcprototype>
+<funcdef>Bool<function> XTestQueryExtension</function></funcdef>
+<paramdef>Display<parameter> *display</parameter></paramdef>
+<paramdef>int<parameter> *event_base</parameter></paramdef>
+<paramdef>int<parameter> *error_base</parameter></paramdef>
+<paramdef>int<parameter> *major_version</parameter></paramdef>
+<paramdef>int<parameter> *minor_version</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+<function>XTestQueryExtension</function>
+returns
+<function>True</function>
+if the specified display supports the XTEST extension, else
+<function>False</function>
+If the extension is supported, *event_base would be set to the event number
+for the first event for this extension and *error_base would be set to the
+error number for the first error for this extension. As no errors or
+events are defined for this version of the extension, the values returned
+here are not defined (nor useful). If the extension is supported,
+*major_version and *minor_version are set to the major and minor version
+numbers of the extension supported by the display. Otherwise, none of
+the arguments are set.
+</para>
+
+<funcsynopsis>
+<funcprototype>
+<funcdef>Bool<function> XTestCompareCursorWithWindow</function></funcdef>
+<paramdef>Display<parameter> *display</parameter></paramdef>
+<paramdef>Window<parameter> *window</parameter></paramdef>
+<paramdef>Cursor<parameter> cursor</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>If the extension is supported,
+<function>XTestCompareCursorWithWindow</function>
+performs a comparison of the cursor whose ID is specified by cursor (which
+may be
+<function>None</function>
+with the cursor of the window specified by window returning
+<function>True</function>
+if they are the same and
+<function>False</function>
+otherwise. If the extension is not supported, then the request is ignored and
+zero is returned.
+</para>
+
+<funcsynopsis>
+<funcprototype>
+<funcdef>Bool<function>XTestCompareCurrentCursorWithWindow</function></funcdef>
+<paramdef>Display<parameter> *display</parameter></paramdef>
+<paramdef>Window<parameter> window</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>If the extension is supported,
+<function>XTestCompareCurrentCursorWithWindow</function>
+performs a comparison of the current cursor with the cursor of the specified
+window returning
+<function>True</function>
+if they are the same and
+<function>False</function>
+otherwise. If the extension is not supported, then the request is ignored and
+zero is returned.
+</para>
+
+<funcsynopsis>
+<funcprototype>
+<funcdef><function>XTestFakeKeyEvent</function></funcdef>
+<paramdef>Display<parameter> *display</parameter></paramdef>
+<paramdef>unsigned int<parameter> keycode</parameter></paramdef>
+<paramdef>Bool<parameter> is_press</parameter></paramdef>
+<paramdef>unsigned long<parameter> delay</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>If the extension is supported,
+<function>XTestFakeKeyEvent</function>
+requests the server to simulate either a
+<function>KeyPress</function>
+(if is_press is
+<function>True</function>
+or a
+<function>KeyRelease</function>
+(if is_press is
+<function>False</function>
+of the key with the specified keycode; otherwise, the request is ignored.
+</para>
+
+<para>
+If the extension is supported, the simulated event will not be processed
+until delay milliseconds after the request is received (if delay is
+<function>CurrentTime</function>
+then this is interpreted as no delay at all). No other requests from
+this client will be processed until this delay, if any, has expired
+and subsequent processing of the simulated event has been completed.
+</para>
+
+<funcsynopsis>
+<funcprototype>
+<funcdef><function>XTestFakeButtonEvent</function></funcdef>
+<paramdef>Display<parameter> *display</parameter></paramdef>
+<paramdef>unsigned int<parameter> button</parameter></paramdef>
+<paramdef>Bool<parameter> is_press</parameter></paramdef>
+<paramdef>unsigned long<parameter> delay</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>If the extension is supported,
+<function>XTestFakeButtonEvent</function>
+requests the server to simulate either a
+<function>ButtonPress</function>
+(if is_press is
+<function>True</function>
+or a
+<function>ButtonRelease</function>
+(if is_press is
+<function>False</function>
+of the logical button numbered by the specified button; otherwise, the
+request is ignored.
+</para>
+
+<para>If the extension is supported,
+the simulated event will not be processed until delay milliseconds
+after the request is received (if delay is
+<function>CurrentTime</function>
+then this is interpreted as no delay at all). No other requests from
+this client will be processed until this delay, if any, has expired
+and subsequent processing of the simulated event has been completed.
+</para>
+
+<funcsynopsis>
+<funcprototype>
+<funcdef><function>XTestFakeMotionEvent</function></funcdef>
+<paramdef>Display<parameter> *display</parameter></paramdef>
+<paramdef>int<parameter> screen_number</parameter></paramdef>
+<paramdef>int<parameter> x</parameter></paramdef>
+<paramdef>int<parameter> y</parameter></paramdef>
+<paramdef>unsigned long<parameter> delay</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>If the extension is supported,
+<function>XTestFakeMotionEvent</function>
+requests the server to simulate a movement of the pointer to the specified
+position (x, y) on the root window of screen_number; otherwise, the request
+is ignored. If screen_number is -1, the current screen (that the pointer
+is on) is used.
+</para>
+
+<para>
+If the extension is supported, the simulated event will not be processed
+until delay milliseconds after the request is received (if delay is
+<function>CurrentTime</function>
+then this is interpreted as no delay at all). No other requests from
+this client will be processed until this delay, if any, has expired
+and subsequent processing of the simulated event has been completed.
+</para>
+
+<funcsynopsis>
+<funcprototype>
+<funcdef><function>XTestFakeRelativeMotionEvent</function></funcdef>
+<paramdef>Display<parameter> *display</parameter></paramdef>
+<paramdef>int<parameter> screen_number</parameter></paramdef>
+<paramdef>int<parameter> x</parameter></paramdef>
+<paramdef>int<parameter> y</parameter></paramdef>
+<paramdef>unsigned long<parameter> delay</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+If the extension is supported,
+<function>XTestFakeRelativeMotionEvent</function>
+requests the server to simulate a movement of the pointer by the specified
+offsets (x, y) relative to the current pointer position on screen_number;
+otherwise, the request is ignored. If screen_number is -1, the
+current screen (that the pointer is on) is used.
+</para>
+
+<para>
+If the extension is supported, the simulated event will not be processed
+until delay milliseconds after the request is received (if delay is
+<function>CurrentTime</function>
+then this is interpreted as no delay at all). No other requests from
+this client will be processed until this delay, if any, has expired
+and subsequent processing of the simulated event has been completed.
+</para>
+
+<funcsynopsis>
+<funcprototype>
+<funcdef><function>XTestGrabControl</function></funcdef>
+<paramdef>Display<parameter> *display</parameter></paramdef>
+<paramdef>Bool<parameter> impervious</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>If impervious is
+<function>True</function>
+then the executing client becomes impervious to server grabs. If impervious is
+<function>False</function>
+then the executing client returns to the normal state of being susceptible
+to server grabs.
+</para>
+
+<funcsynopsis>
+<funcprototype>
+<funcdef>Bool<function> XTestSetGContextOfGC</function></funcdef>
+<paramdef>GC<parameter> gc</parameter></paramdef>
+<paramdef>GContext<parameter> gid</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+<function>XTestSetGContextOfGC</function>
+sets the GContext within the opaque datatype referenced by gc to
+be that specified by gid.
+</para>
+
+<funcsynopsis>
+<funcprototype>
+<funcdef><function>XTestSetVisualIDOfVisual</function></funcdef>
+<paramdef>Visual<parameter> *visual</parameter></paramdef>
+<paramdef>VisualID<parameter> visualid</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+<function>XTestSetVisualIDOfVisual</function>
+sets the VisualID within the opaque datatype referenced by visual to
+be that specified by visualid.
+</para>
+
+<funcsynopsis>
+<funcprototype>
+<funcdef>Bool<function> XTestDiscard</function></funcdef>
+<paramdef>Display<parameter> *display</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+<function>XTestDiscard</function>
+discards any requests within the output buffer for the specified display.
+It returns
+<function>True</function>
+if any requests were discarded; otherwise, it returns
+<function>False</function>
+</para>
+</chapter>
+
+<chapter id='references'>
+<title>References</title>
+
+<para>
+Annicchiarico, D., et al., <emphasis remap='I'>XTrap: The XTrap
+Architecture</emphasis>.
+Digital Equipment Corporation, July 1991.
+</para>
+
+<para>
+Drake, K. J., <emphasis remap='I'>Some Proposals for a Minimum X11
+Testing Extension</emphasis>.
+UniSoft Ltd., June 1991.
+</para>
+
+</chapter>
+</book>
+