aboutsummaryrefslogtreecommitdiff
path: root/libXext/specs/synclib.xml
diff options
context:
space:
mode:
Diffstat (limited to 'libXext/specs/synclib.xml')
-rw-r--r--libXext/specs/synclib.xml1626
1 files changed, 813 insertions, 813 deletions
diff --git a/libXext/specs/synclib.xml b/libXext/specs/synclib.xml
index 3edeaaaa7..36c716297 100644
--- a/libXext/specs/synclib.xml
+++ b/libXext/specs/synclib.xml
@@ -1,813 +1,813 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-
-<!-- lifted from troff+ms+XMan by doclifter -->
-<book id="synclib">
-
-<bookinfo>
- <title>X Synchronization Extension Library</title>
- <subtitle>X Consortium Standard</subtitle>
- <releaseinfo>X Version 11, Release 6.4</releaseinfo>
- <authorgroup>
- <author>
- <firstname>Tim</firstname><surname>Glauert</surname>
- <affiliation><orgname>Olivetti Research/MultiWorks</orgname></affiliation>
- </author>
- <author>
- <firstname>Dave</firstname>
- <surname>Carver</surname>
- <affiliation><orgname>Digital Equipment Corporation, MIT/Project Athena</orgname></affiliation>
- </author>
- <author>
- <firstname>Jim</firstname>
- <surname>Gettys</surname>
- <affiliation><orgname>Digital Equipment Corporation, Cambridge Research Laboratory</orgname></affiliation>
- </author>
- <author>
- <firstname>David</firstname>
- <surname>Wiggins</surname>
- <affiliation><orgname>X Consortium, Inc.</orgname></affiliation>
- </author>
- </authorgroup>
- <releaseinfo>Version 3.0</releaseinfo>
- <affiliation><orgname>X Consortium</orgname></affiliation>
- <productnumber>X Version 11, Release 6.4</productnumber>
-<legalnotice>
-
-<para>
-Copyright 1991 by Olivetti Research Limited, Cambridge England and Digital Equipment Corporation, Maynard, Massachusetts
-</para>
-
-<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 appear in all copies. Olivetti, Digital, MIT, and the
-X Consortium make 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.
-</para>
-</legalnotice>
-
-<legalnotice>
-
-<para>
-Copyright &copy; 1991 X Consortium, Inc.
-</para>
-
-<para>
-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:
-</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 "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.
-</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="synchronization_protocol">
-<title>Synchronization Protocol</title>
-
-<para>
-The core X protocol makes no guarantees about the relative order of
-execution of requests for different clients. This means that any
-synchronization between clients must be done at the client level in an
-operating system-dependent and network-dependent manner. Even if there
-was an accepted standard for such synchronization, the use of a network
-introduces unpredictable delays between the synchronization of the clients and
-the delivery of the resulting requests to the X server.
-</para>
-<para>
-The core X protocol also makes no guarantees about the time at which
-requests are executed, which means that all clients with real-time constraints
-must implement their timing on the host computer. Any such timings are
-subject to error introduced by delays within the operating system and
-network and are inefficient because of the need for round-trip requests that
-keep the client and server synchronized.
-</para>
-<para>
-The synchronization extension provides primitives that allow synchronization
-between clients to take place entirely within the X server. This removes any
-error introduced by the network and makes it possible to synchronize clients
-on different hosts running different operating systems. This is important for
-multimedia applications, where audio, video, and graphics data streams are
-being synchronized. The extension also provides internal timers within the X
-server to which client requests can be synchronized. This allows simple
-animation applications to be implemented without any round-trip requests
-and makes best use of buffering within the client, network, and server.
-</para>
-
-<sect1 id="description">
-<title>Description</title>
-<para>
-The mechanism used by this extension for synchronization within the X server
-is to block the processing of requests from a client until a specific
-synchronization condition occurs. When the condition occurs, the client is
-released and processing of requests continues. Multiple clients may block on
-the same condition to give inter-client synchronization. Alternatively, a single
-client may block on a condition such as an animation frame marker.
-</para>
-<para>
-The extension adds <function>Counter</function> and
-<function>Alarm</function> to the set of resources managed by
-the server. A counter has a 64-bit integer value that may be increased or
-decreased by client requests or by the server internally. A client can
-block by sending an <function>Await</function> request that waits until
-one of a set of synchronization conditions, called TRIGGERs, becomes TRUE.
-</para>
-<para>
-The <function>CreateCounter</function> request allows a client to create
-a <function>Counter</function> that can be changed by explicit
-<function>SetCounter</function> and <function>ChangeCounter</function>
-requests. These can be used to implement synchronization between
-different clients.
-</para>
-<para>
-There are some counters, called <function>System Counters</function>,
-that are changed by the server internally rather than by client
-requests. The effect of any change to a system counter is not visible
-until the server has finished processing the current request. In other
-words, system counters are apparently updated in the gaps between the
-execution of requests rather than during the actual execution of a
-request. The extension provides a system counter that advances with the
-server time as defined by the core protocol, and it may also provide
-counters that advance with the real-world time or that change each
-time the CRT screen is refreshed. Other extensions may provide their own
-extension-specific system counters.
-</para>
-<para>
-The extension provides an <function>Alarm</function> mechanism that allows clients to receive an
-event on a regular basis when a particular counter is changed.
-</para>
-</sect1>
-</chapter>
-
-<chapter id="c_language_binding">
-<title>C Language Binding</title>
-
-<para>
-The C routines provide direct access to the protocol and add no additional
-semantics.
-</para>
-<para>
-The include file for this extension is &lt;X11/extensions/sync.h&gt;.
-Most of the names in the language binding are derived from the protocol
-names by prepending XSync to the protocol name and changing the
-capitalization.
-</para>
-
-<sect1 id="c_functions">
-<title>C Functions</title>
-
-<para>
-Most of the following functions generate SYNC protocol requests.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>Status <function>XSyncQueryExtension</function></funcdef>
- <paramdef>Display <parameter> *dpy</parameter></paramdef>
- <paramdef>int <parameter> *event_base_return</parameter></paramdef>
- <paramdef>int <parameter> *error_base_return</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-If dpy supports the SYNC extension,
-<function>XSyncQueryExtension</function> returns True,
-sets *event_base_return to the event number for the first SYNC event, and
-sets *error_base_return to the error number for the first SYNC error. If dpy
-does not support the SYNC extension, it returns False.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>Status <function>XSyncInitialize</function></funcdef>
- <paramdef>Display <parameter> *dpy</parameter></paramdef>
- <paramdef>int <parameter> *major_version_return</parameter></paramdef>
- <paramdef>int <parameter> *minor_version_return</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-<function>XSyncInitialize</function> sets *major_version_return and
-*minor version return to the major/minor SYNC protocol version supported
-by the server. If the XSync library is compatible with the version
-returned by the server, this function returns <function>True</function>.
-If dpy does not support the SYNC extension, or if there was an error
-during communication with the server, or if the server and library protocol
-versions are incompatible, this function returns <function>False</function>.
-The only XSync function that may be called before this function is
-XSyncQueryExtension. If a client violates this rule, the effects of all XSync
-calls that it makes are undefined.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>XSyncSystemCounter *<function>XSyncListSystemCounters</function></funcdef>
- <paramdef>Display <parameter> *dpy</parameter></paramdef>
- <paramdef>int <parameter> *n_counters_return</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-<function>XSyncListSystemCounters</function> returns a pointer to an array
-of system counters supported by the display and sets *n_counters_return
-to the number of counters in the array. The array should be freed with
-<function>XSyncFreeSystemCounterList</function>. If dpy does not support
-the SYNC extension, or if there was an error during communication with
-the server, or if the server does not support any system counters,
-this function returns NULL.
-</para>
-
-<para>
-XSyncSystemCounter has the following fields:
-</para>
-
-<literallayout remap='Ds'>
-char * name; /* null-terminated name of system counter */
-XSyncCounter counter; /* counter id of this system counter */
-XSyncValue resolution; /* resolution of this system counter */
-</literallayout>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>void <function>XSyncFreeSystemCounterList</function></funcdef>
- <paramdef>XSyncSystemCounter <parameter> *list</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-<function>XSyncFreeSystemCounterList</function> frees the memory
-associated with the system counter list returned by
-<function>XSyncListSystemCounters</function>.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>XSyncCounter <function>XSyncCreateCounter</function></funcdef>
- <paramdef>Display<parameter> *dpy</parameter></paramdef>
- <paramdef>XSyncValue<parameter> initial_value</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-<function>XSyncCreateCounter</function> creates a counter on the dpy
-with the given initial value and returns the counter ID. It returns
-<function>None</function> if dpy does not support the SYNC extension.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>Status <function>XSyncSetCounter</function></funcdef>
- <paramdef>Display<parameter> *dpy</parameter></paramdef>
- <paramdef>XSyncCounter<parameter> counter</parameter></paramdef>
- <paramdef>XSyncValue<parameter> value</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-
-<para>
-<function>XSyncSetCounter</function> sets counter to value. It returns
-<function>False </function> if dpy does not
-support the SYNC extension; otherwise, it returns <function>True</function>.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>Status <function>XSyncChangeCounter</function></funcdef>
- <paramdef>Display<parameter> *dpy</parameter></paramdef>
- <paramdef>XSyncCounter<parameter> counter</parameter></paramdef>
- <paramdef>XSyncValue<parameter> value</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-<function>XSyncChangeCounter</function> adds value to counter. It returns
-<function>False</function> if dpy does not support the SYNC extension;
-otherwise, it returns
-<function>True</function>.
-</para>
-<funcsynopsis>
-<funcprototype>
- <funcdef>Status <function>XSyncDestroyCounter</function></funcdef>
- <paramdef>Display<parameter> *dpy</parameter></paramdef>
- <paramdef>XSyncCounter<parameter> counter</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-<function>XSyncDestroyCounter</function> destroys counter. It returns
-<function>False</function> if dpy does not support the SYNC extension;
-otherwise, it returns <function>True</function>.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>Status <function>XSyncQueryCounter</function></funcdef>
- <paramdef>Display<parameter> *dpy</parameter></paramdef>
- <paramdef>XSyncCounter<parameter> counter</parameter></paramdef>
- <paramdef>XSyncValue<parameter> *value_return</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-<function>XSyncQueryCounter</function> sets *value_return to the current
-value of counter. It returns <function>False</function> if there was an
-error during communication with the server or if dpy does not support the
-SYNC extension; otherwise, it returns <function>True</function>.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>Status <function>XSyncAwait</function></funcdef>
- <paramdef>Display<parameter> *dpy</parameter></paramdef>
- <paramdef>XSyncWaitCondition<parameter> *wait_list</parameter></paramdef>
- <paramdef>int<parameter> n_conditions</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-<function>XSyncAwait</function> awaits on the conditions in wait_list.
-The n_conditions is the number of wait conditions in wait_list. It
-returns <function>False</function> if dpy does not support the SYNC
-extension; otherwise, it returns <function>True</function>. The await is
-processed asynchronously by the server; this function always returns
-immediately after issuing the request.
-</para>
-<para>
-XSyncWaitCondition has the following fields:
-</para>
-
-<literallayout remap='Ds'>
-XSyncCounter trigger.counter; /*counter to trigger on */
-XSyncValueType trigger.value_type; /*absolute/relative */
-XSyncValue trigger.wait_value; /*value to compare counter to */
-XSyncTestType trigger.test_type; /*pos/neg comparison/transtion */
-XSyncValue event_threshold; /*send event if past threshold */
-</literallayout>
-
-<para>
-<function>XSyncValueType</function> can be either
-<function>XSyncAbsolute</function> or <function>XSyncRelative</function>.
-</para>
-
-<para>
-<function>XSyncTestType</function> can be one of
-<function>XSyncPositiveTransition</function>,
-<function>XSyncNegativeTransition</function>,
-<function>XSyncPositiveComparison</function>, or
-<function>XSyncNegativeComparison</function>.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>XSyncAlarm <function>XSyncCreateAlarm</function></funcdef>
- <paramdef>Display<parameter> *dpy</parameter></paramdef>
- <paramdef>unsigned long<parameter> values_mask</parameter></paramdef>
- <paramdef>XSyncAlarmAttributes<parameter> *values`</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-<function>XSyncCreateAlarm</function> creates an alarm and returns the
-alarm ID. It returns None if the display does not support the SYNC
-extension. The values_mask and values specify the alarm attributes.
-</para>
-
-<para>
-<function>XSyncAlarmAttributes</function> has the following fields. The
-attribute_mask column specifies the symbol that the caller should OR
-into values_mask to indicate that the value for the corresponding
-attribute was actually supplied. Default values are used for all
-attributes that do not have their attribute_mask OR’ed into values_mask.
-See the protocol description for <function>CreateAlarm</function> for the
-defaults.
-</para>
-
-<literallayout remap='Ds'>
-type field name attribute_mask
-XSyncCounter trigger.counter; XSyncCACounter
-XSyncValueType trigger.value_type; XSyncCAValueType
-XSyncValue trigger.wait_value; XSyncCAValue
-XSyncTestType trigger.test_type; XSyncCATestType
-XSyncValue delta; XSyncCADelta
-Bool events; XSyncCAEvents
-XSyncAlarmState state; client cannot set this
-</literallayout>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>Status <function>XSyncDestroyAlarm</function></funcdef>
- <paramdef>Display<parameter> *dpy</parameter></paramdef>
- <paramdef>XSyncAlarm<parameter> alarm</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-<function>XSyncDestroyAlarm</function> destroys alarm. It returns
-<function>False</function> if dpy does not support
-the SYNC extension; otherwise, it returns <function>True</function>.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>Status <function>XSyncQueryAlarm</function></funcdef>
- <paramdef>Display<parameter> *dpy</parameter></paramdef>
- <paramdef>XSyncAlarm<parameter> alarm</parameter></paramdef>
- <paramdef>XSyncAlarmAttributes<parameter> *values_return</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-
-<para>
-<function>XSyncQueryAlarm</function> sets *values_return to the alarm’s
-attributes. It returns <function>False</function> if there was an error
-during communication with the server or if dpy does not support the
-SYNC extension; otherwise, it returns <function>True</function>.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>Status <function>XSyncChangeAlarm</function></funcdef>
- <paramdef>Display<parameter> *dpy</parameter></paramdef>
- <paramdef>XSyncAlarm<parameter> alarm</parameter></paramdef>
- <paramdef>unsigned long<parameter> values_mask</parameter></paramdef>
- <paramdef>XSyncAlarmAttributes<parameter> *values</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-<function>XSyncChangeAlarm</function> changes alarm’s attributes. The
-attributes to change are specified as in
-<function>XSyncCreateAlarm</function>. It returns
-<function>False</function> if dpy does not support
-the SYNC extension; otherwise, it returns <function>True</function>.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>Status <function>XSyncSetPriority</function></funcdef>
- <paramdef>Display<parameter> *dpy</parameter></paramdef>
- <paramdef>XID<parameter> client_resource_id</parameter></paramdef>
- <paramdef>int<parameter> priority</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-<function>XSyncSetPriority</function> sets the priority of the client
-owning client_resource_id to priority. If client_resource_id is None, it
-sets the caller’s priority. It returns
-<function>False</function> if dpy does not support the SYNC extension;
-otherwise, it returns <function>True</function>.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>Status <function>XSyncGetPriority</function></funcdef>
- <paramdef>Display<parameter> *dpy</parameter></paramdef>
- <paramdef>XID<parameter> client_resource_id</parameter></paramdef>
- <paramdef>int<parameter> *return_priority</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-<function>XSyncGetPriority</function> sets *return_priority to the
-priority of the client owning client_resource_id. If client_resource_id
-is None, it sets *return_priority to the caller’s priority. It returns
-<function>False</function> if there was an error during communication
-with the server or if dpy does not support the SYNC extension; otherwise, it
-returns <function>True</function>.
-</para>
-
-</sect1>
-
-<sect1 id="c_macros_functions">
-<title>C Macros/Functions</title>
-
-<para>
-The following procedures manipulate 64-bit values. They are defined both as
-macros and as functions. By default, the macro form is used. To use the
-function form, #undef the macro name to uncover the function.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>void <function>XSyncIntToValue</function></funcdef>
- <paramdef>XSyncValue<parameter> *pv</parameter></paramdef>
- <paramdef>int<parameter> i</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-Converts i to an <function>XSyncValue</function> and stores it in *pv.
-Performs sign extension (*pv will have the same sign as i.)
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>void <function>XSyncIntsToValue</function></funcdef>
- <paramdef>XSyncValue<parameter> *pv</parameter></paramdef>
- <paramdef>unsigned int<parameter> low</parameter></paramdef>
- <paramdef>int<parameter> high</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-Stores low in the low 32 bits of *pv and high in the high 32 bits of *pv.
-</para>
-
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>Bool <function>XSyncValueGreaterThan</function></funcdef>
- <paramdef>XSyncValue<parameter> a</parameter></paramdef>
- <paramdef>XSyncValue<parameter> b</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-Returns <function>True</function> if a is greater than b, else returns
-<function>False</function>.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>Bool <function>XSyncValueLessThan</function></funcdef>
- <paramdef>XSyncValue<parameter> a</parameter></paramdef>
- <paramdef>XSyncValue<parameter> b</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-Returns <function>True</function> if a is less than b, else returns
-<function>False</function>.
-</para>
-
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>Bool <function>XSyncValueGreaterOrEqual</function></funcdef>
- <paramdef>XSyncValue<parameter> a</parameter></paramdef>
- <paramdef>XSyncValue<parameter> b</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-Returns <function>True</function> if a is greater than or equal to b,
-else returns <function>False</function>.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>Bool <function>XSyncValueLessOrEqual</function></funcdef>
- <paramdef>XSyncValue<parameter> a</parameter></paramdef>
- <paramdef>XSyncValue<parameter> b</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-Returns <function>True</function> if a is less than or equal to b,
-else returns <function>False</function>.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>Bool <function>XSyncValueEqual</function></funcdef>
- <paramdef>XSyncValue<parameter> a</parameter></paramdef>
- <paramdef>XSyncValue<parameter> b</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-Returns <function>True</function> if a is equal to b,
-else returns <function>False</function>.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>Bool <function>XSyncValueIsNegative</function></funcdef>
- <paramdef>XSyncValue<parameter> v</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-Returns <function>True</function> if v is negative,
-else returns <function>False</function>.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>Bool <function>XSyncValueIsZero</function></funcdef>
- <paramdef>XSyncValue<parameter> v</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-Returns <function>True</function> if v is zero,
-else returns <function>False</function>.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>Bool <function>XSyncValueIsPositive</function></funcdef>
- <paramdef>XSyncValue<parameter> v</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-Returns <function>True</function> if v is positive,
-else returns <function>False</function>.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>unsigned int <function>XSyncValueLow32</function></funcdef>
- <paramdef>XSyncValue<parameter> v</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-Returns the low 32 bits of v.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>unsigned int <function>XSyncValueHigh32</function></funcdef>
- <paramdef>XSyncValue<parameter> v</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-Returns the high 32 bits of v.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>void <function>XSyncValueAdd</function></funcdef>
- <paramdef>XSyncValue<parameter> *presult</parameter></paramdef>
- <paramdef>XSyncValue<parameter> a</parameter></paramdef>
- <paramdef>XSyncValue<parameter> b</parameter></paramdef>
- <paramdef>Bool<parameter> *poverflow</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-Adds a to b and stores the result in *presult. If the result could not
-fit in 64 bits, *poverflow is set to <function>True</function>, else it is
-set to <function>False</function>.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>void <function>XSyncValueSubtract</function></funcdef>
- <paramdef>XSyncValue<parameter> *presult</parameter></paramdef>
- <paramdef>XSyncValue<parameter> a</parameter></paramdef>
- <paramdef>XSyncValue<parameter> b</parameter></paramdef>
- <paramdef>Bool<parameter> *poverflow</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-Subtracts b from a and stores the result in *presult. If the result could not
-fit in 64 bits, *poverflow is set to <function>True</function>, else it is
-set to <function>False</function>.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>void <function>XSyncMaxValue</function></funcdef>
- <paramdef>XSyncValue<parameter> *pv</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-Sets *pv to the maximum value expressible in 64 bits.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>void <function>XSyncMinValue</function></funcdef>
- <paramdef>XSyncValue<parameter> *pv</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-Sets *pv to the minimum value expressible in 64 bits.
-</para>
-
-</sect1>
-
-<sect1 id="events">
-<title>Events</title>
-
-<para>
-Let <emphasis remap='I'>event_base</emphasis> be the value event base return as defined in the function
-<function>XSyncQueryExtension</function>.
-</para>
-
-<para>
-An <function>XSyncCounterNotifyEvent</function>’s type field has the value
-event_base + <function>XSyncCounterNotify</function>. The fields of this
-structure are:
-</para>
-
-<literallayout remap='Ds'>
-int type; /* event base + XSyncCounterNotify */
-unsigned long serial; /* number of last request processed by server */
-Bool send event; /* true if this came from a SendEvent request */
-Display * display; /* Display the event was read from */
-XSyncCounter counter; /* counter involved in await */
-XSyncValue wait_value; /* value being waited for */
-XSyncValue counter_value; /* counter value when this event was sent */
-Time time; /* milliseconds */
-int count; /* how many more events to come */
-Bool destroyed; /* True if counter was destroyed */
-</literallayout>
-
-<para>
-An <function>XSyncAlarmNotifyEvent</function>’s type field has the value
-event_base + <function>XSyncAlarmNotify</function>. The fields of
-this structure are:
-</para>
-
-<literallayout remap='Ds'>
-int type; /* event_base + XSyncAlarmNotify */
-unsigned long serial; /* number of last request processed by server */
-Bool send_event; /* true if this came from a SendEvent request */
-Display * display; /*Display the event was read from */
-XSyncAlarm alarm; /* alarm that triggered */
-XSyncValue counter_value /* value that triggered the alarm */
-XSyncValue alarm_value /* test value of trigger in alarm */
-Time time; /* milliseconds */
-XSyncAlarmState state; /* new state of alarm */
-</literallayout>
-
-</sect1>
-
-<sect1 id="errors">
-<title>Errors</title>
-<para>
-Let <emphasis remap='I'>error_base</emphasis> be the value
-<emphasis remap='I'>error_base_return</emphasis> as defined in the function
-<function>XSyncQueryExtension</function>.
-</para>
-
-<para>
-An <function>XSyncAlarmError</function>’s error_code field has
-<function>XSyncBadAlarm</function>. The fields of this structure are:
-</para>
-
-<literallayout remap='Ds'>
-int type
-Display * display; /* Display the event was read from */
-XSyncCounter counter; /* resource id */
-unsigned long serial; /* serial number of failed request */
-unsigned char error_code; /* error_base + XSyncBadAlarm */
-unsigned char request_code; /* Major op-code of failed request */
-unsigned char minor_code; /* Minor op-code of failed request */
-</literallayout>
-
-<para>
-An <function>XSyncCounterError</function>’s error code field has the value
-error_base + <function>XSyncBadCounter</function>. The fields of this
-structure are:
-</para>
-<literallayout remap='Ds'>
-int type
-Display * display; /* Display the event was read from */
-XSyncCounter counter; /* resource id */
-unsigned long serial; /* serial number of failed request */
-unsigned char error_code; /* error_base + XSyncBadCounter */
-unsigned char request_code; /* Major op-code of failed request */
-unsigned char minor_code; /* Minor op-code of failed request */
-</literallayout>
-
-</sect1>
-</chapter>
-</book>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+ "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
+
+
+<!-- lifted from troff+ms+XMan by doclifter -->
+<book id="synclib">
+
+<bookinfo>
+ <title>X Synchronization Extension Library</title>
+ <subtitle>X Consortium Standard</subtitle>
+ <releaseinfo>X Version 11, Release 6.4</releaseinfo>
+ <authorgroup>
+ <author>
+ <firstname>Tim</firstname><surname>Glauert</surname>
+ <affiliation><orgname>Olivetti Research/MultiWorks</orgname></affiliation>
+ </author>
+ <author>
+ <firstname>Dave</firstname>
+ <surname>Carver</surname>
+ <affiliation><orgname>Digital Equipment Corporation, MIT/Project Athena</orgname></affiliation>
+ </author>
+ <author>
+ <firstname>Jim</firstname>
+ <surname>Gettys</surname>
+ <affiliation><orgname>Digital Equipment Corporation, Cambridge Research Laboratory</orgname></affiliation>
+ </author>
+ <author>
+ <firstname>David</firstname>
+ <surname>Wiggins</surname>
+ <affiliation><orgname>X Consortium, Inc.</orgname></affiliation>
+ </author>
+ </authorgroup>
+ <releaseinfo>Version 3.0</releaseinfo>
+ <affiliation><orgname>X Consortium</orgname></affiliation>
+ <productnumber>X Version 11, Release 6.4</productnumber>
+<legalnotice>
+
+<para>
+Copyright 1991 by Olivetti Research Limited, Cambridge England and Digital Equipment Corporation, Maynard, Massachusetts
+</para>
+
+<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 appear in all copies. Olivetti, Digital, MIT, and the
+X Consortium make 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.
+</para>
+</legalnotice>
+
+<legalnotice>
+
+<para>
+Copyright &copy; 1991 X Consortium, Inc.
+</para>
+
+<para>
+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:
+</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 "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.
+</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="synchronization_protocol">
+<title>Synchronization Protocol</title>
+
+<para>
+The core X protocol makes no guarantees about the relative order of
+execution of requests for different clients. This means that any
+synchronization between clients must be done at the client level in an
+operating system-dependent and network-dependent manner. Even if there
+was an accepted standard for such synchronization, the use of a network
+introduces unpredictable delays between the synchronization of the clients and
+the delivery of the resulting requests to the X server.
+</para>
+<para>
+The core X protocol also makes no guarantees about the time at which
+requests are executed, which means that all clients with real-time constraints
+must implement their timing on the host computer. Any such timings are
+subject to error introduced by delays within the operating system and
+network and are inefficient because of the need for round-trip requests that
+keep the client and server synchronized.
+</para>
+<para>
+The synchronization extension provides primitives that allow synchronization
+between clients to take place entirely within the X server. This removes any
+error introduced by the network and makes it possible to synchronize clients
+on different hosts running different operating systems. This is important for
+multimedia applications, where audio, video, and graphics data streams are
+being synchronized. The extension also provides internal timers within the X
+server to which client requests can be synchronized. This allows simple
+animation applications to be implemented without any round-trip requests
+and makes best use of buffering within the client, network, and server.
+</para>
+
+<sect1 id="description">
+<title>Description</title>
+<para>
+The mechanism used by this extension for synchronization within the X server
+is to block the processing of requests from a client until a specific
+synchronization condition occurs. When the condition occurs, the client is
+released and processing of requests continues. Multiple clients may block on
+the same condition to give inter-client synchronization. Alternatively, a single
+client may block on a condition such as an animation frame marker.
+</para>
+<para>
+The extension adds <function>Counter</function> and
+<function>Alarm</function> to the set of resources managed by
+the server. A counter has a 64-bit integer value that may be increased or
+decreased by client requests or by the server internally. A client can
+block by sending an <function>Await</function> request that waits until
+one of a set of synchronization conditions, called TRIGGERs, becomes TRUE.
+</para>
+<para>
+The <function>CreateCounter</function> request allows a client to create
+a <function>Counter</function> that can be changed by explicit
+<function>SetCounter</function> and <function>ChangeCounter</function>
+requests. These can be used to implement synchronization between
+different clients.
+</para>
+<para>
+There are some counters, called <function>System Counters</function>,
+that are changed by the server internally rather than by client
+requests. The effect of any change to a system counter is not visible
+until the server has finished processing the current request. In other
+words, system counters are apparently updated in the gaps between the
+execution of requests rather than during the actual execution of a
+request. The extension provides a system counter that advances with the
+server time as defined by the core protocol, and it may also provide
+counters that advance with the real-world time or that change each
+time the CRT screen is refreshed. Other extensions may provide their own
+extension-specific system counters.
+</para>
+<para>
+The extension provides an <function>Alarm</function> mechanism that allows clients to receive an
+event on a regular basis when a particular counter is changed.
+</para>
+</sect1>
+</chapter>
+
+<chapter id="c_language_binding">
+<title>C Language Binding</title>
+
+<para>
+The C routines provide direct access to the protocol and add no additional
+semantics.
+</para>
+<para>
+The include file for this extension is &lt;X11/extensions/sync.h&gt;.
+Most of the names in the language binding are derived from the protocol
+names by prepending XSync to the protocol name and changing the
+capitalization.
+</para>
+
+<sect1 id="c_functions">
+<title>C Functions</title>
+
+<para>
+Most of the following functions generate SYNC protocol requests.
+</para>
+
+<funcsynopsis id='xsyncqueryextension'>
+<funcprototype>
+ <funcdef>Status <function>XSyncQueryExtension</function></funcdef>
+ <paramdef>Display <parameter> *dpy</parameter></paramdef>
+ <paramdef>int <parameter> *event_base_return</parameter></paramdef>
+ <paramdef>int <parameter> *error_base_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+If dpy supports the SYNC extension,
+<function>XSyncQueryExtension</function> returns True,
+sets *event_base_return to the event number for the first SYNC event, and
+sets *error_base_return to the error number for the first SYNC error. If dpy
+does not support the SYNC extension, it returns False.
+</para>
+
+<funcsynopsis id='xsyncinitialize'>
+<funcprototype>
+ <funcdef>Status <function>XSyncInitialize</function></funcdef>
+ <paramdef>Display <parameter> *dpy</parameter></paramdef>
+ <paramdef>int <parameter> *major_version_return</parameter></paramdef>
+ <paramdef>int <parameter> *minor_version_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+<function>XSyncInitialize</function> sets *major_version_return and
+*minor version return to the major/minor SYNC protocol version supported
+by the server. If the XSync library is compatible with the version
+returned by the server, this function returns <function>True</function>.
+If dpy does not support the SYNC extension, or if there was an error
+during communication with the server, or if the server and library protocol
+versions are incompatible, this function returns <function>False</function>.
+The only XSync function that may be called before this function is
+XSyncQueryExtension. If a client violates this rule, the effects of all XSync
+calls that it makes are undefined.
+</para>
+
+<funcsynopsis id='xsynclistsystemcounters'>
+<funcprototype>
+ <funcdef>XSyncSystemCounter *<function>XSyncListSystemCounters</function></funcdef>
+ <paramdef>Display <parameter> *dpy</parameter></paramdef>
+ <paramdef>int <parameter> *n_counters_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+<function>XSyncListSystemCounters</function> returns a pointer to an array
+of system counters supported by the display and sets *n_counters_return
+to the number of counters in the array. The array should be freed with
+<function>XSyncFreeSystemCounterList</function>. If dpy does not support
+the SYNC extension, or if there was an error during communication with
+the server, or if the server does not support any system counters,
+this function returns NULL.
+</para>
+
+<para>
+XSyncSystemCounter has the following fields:
+</para>
+
+<literallayout remap='Ds'>
+char * name; /* null-terminated name of system counter */
+XSyncCounter counter; /* counter id of this system counter */
+XSyncValue resolution; /* resolution of this system counter */
+</literallayout>
+
+<funcsynopsis id='xsyncfreesystemcounterlist'>
+<funcprototype>
+ <funcdef>void <function>XSyncFreeSystemCounterList</function></funcdef>
+ <paramdef>XSyncSystemCounter <parameter> *list</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+<function>XSyncFreeSystemCounterList</function> frees the memory
+associated with the system counter list returned by
+<function>XSyncListSystemCounters</function>.
+</para>
+
+<funcsynopsis id='xsynccreatecounter'>
+<funcprototype>
+ <funcdef>XSyncCounter <function>XSyncCreateCounter</function></funcdef>
+ <paramdef>Display<parameter> *dpy</parameter></paramdef>
+ <paramdef>XSyncValue<parameter> initial_value</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+<function>XSyncCreateCounter</function> creates a counter on the dpy
+with the given initial value and returns the counter ID. It returns
+<function>None</function> if dpy does not support the SYNC extension.
+</para>
+
+<funcsynopsis id='xsyncsetcounter'>
+<funcprototype>
+ <funcdef>Status <function>XSyncSetCounter</function></funcdef>
+ <paramdef>Display<parameter> *dpy</parameter></paramdef>
+ <paramdef>XSyncCounter<parameter> counter</parameter></paramdef>
+ <paramdef>XSyncValue<parameter> value</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+
+<para>
+<function>XSyncSetCounter</function> sets counter to value. It returns
+<function>False </function> if dpy does not
+support the SYNC extension; otherwise, it returns <function>True</function>.
+</para>
+
+<funcsynopsis id='xsyncchangecounter'>
+<funcprototype>
+ <funcdef>Status <function>XSyncChangeCounter</function></funcdef>
+ <paramdef>Display<parameter> *dpy</parameter></paramdef>
+ <paramdef>XSyncCounter<parameter> counter</parameter></paramdef>
+ <paramdef>XSyncValue<parameter> value</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+<function>XSyncChangeCounter</function> adds value to counter. It returns
+<function>False</function> if dpy does not support the SYNC extension;
+otherwise, it returns
+<function>True</function>.
+</para>
+<funcsynopsis id='xsyncdestroycounter'>
+<funcprototype>
+ <funcdef>Status <function>XSyncDestroyCounter</function></funcdef>
+ <paramdef>Display<parameter> *dpy</parameter></paramdef>
+ <paramdef>XSyncCounter<parameter> counter</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+<function>XSyncDestroyCounter</function> destroys counter. It returns
+<function>False</function> if dpy does not support the SYNC extension;
+otherwise, it returns <function>True</function>.
+</para>
+
+<funcsynopsis id='xsyncquerycounter'>
+<funcprototype>
+ <funcdef>Status <function>XSyncQueryCounter</function></funcdef>
+ <paramdef>Display<parameter> *dpy</parameter></paramdef>
+ <paramdef>XSyncCounter<parameter> counter</parameter></paramdef>
+ <paramdef>XSyncValue<parameter> *value_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+<function>XSyncQueryCounter</function> sets *value_return to the current
+value of counter. It returns <function>False</function> if there was an
+error during communication with the server or if dpy does not support the
+SYNC extension; otherwise, it returns <function>True</function>.
+</para>
+
+<funcsynopsis id='xsyncawait'>
+<funcprototype>
+ <funcdef>Status <function>XSyncAwait</function></funcdef>
+ <paramdef>Display<parameter> *dpy</parameter></paramdef>
+ <paramdef>XSyncWaitCondition<parameter> *wait_list</parameter></paramdef>
+ <paramdef>int<parameter> n_conditions</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+<function>XSyncAwait</function> awaits on the conditions in wait_list.
+The n_conditions is the number of wait conditions in wait_list. It
+returns <function>False</function> if dpy does not support the SYNC
+extension; otherwise, it returns <function>True</function>. The await is
+processed asynchronously by the server; this function always returns
+immediately after issuing the request.
+</para>
+<para>
+XSyncWaitCondition has the following fields:
+</para>
+
+<literallayout remap='Ds'>
+XSyncCounter trigger.counter; /*counter to trigger on */
+XSyncValueType trigger.value_type; /*absolute/relative */
+XSyncValue trigger.wait_value; /*value to compare counter to */
+XSyncTestType trigger.test_type; /*pos/neg comparison/transtion */
+XSyncValue event_threshold; /*send event if past threshold */
+</literallayout>
+
+<para>
+<function>XSyncValueType</function> can be either
+<function>XSyncAbsolute</function> or <function>XSyncRelative</function>.
+</para>
+
+<para>
+<function>XSyncTestType</function> can be one of
+<function>XSyncPositiveTransition</function>,
+<function>XSyncNegativeTransition</function>,
+<function>XSyncPositiveComparison</function>, or
+<function>XSyncNegativeComparison</function>.
+</para>
+
+<funcsynopsis id='xsynccreatealarm'>
+<funcprototype>
+ <funcdef>XSyncAlarm <function>XSyncCreateAlarm</function></funcdef>
+ <paramdef>Display<parameter> *dpy</parameter></paramdef>
+ <paramdef>unsigned long<parameter> values_mask</parameter></paramdef>
+ <paramdef>XSyncAlarmAttributes<parameter> *values`</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+<function>XSyncCreateAlarm</function> creates an alarm and returns the
+alarm ID. It returns None if the display does not support the SYNC
+extension. The values_mask and values specify the alarm attributes.
+</para>
+
+<para>
+<function>XSyncAlarmAttributes</function> has the following fields. The
+attribute_mask column specifies the symbol that the caller should OR
+into values_mask to indicate that the value for the corresponding
+attribute was actually supplied. Default values are used for all
+attributes that do not have their attribute_mask OR’ed into values_mask.
+See the protocol description for <function>CreateAlarm</function> for the
+defaults.
+</para>
+
+<literallayout remap='Ds'>
+type field name attribute_mask
+XSyncCounter trigger.counter; XSyncCACounter
+XSyncValueType trigger.value_type; XSyncCAValueType
+XSyncValue trigger.wait_value; XSyncCAValue
+XSyncTestType trigger.test_type; XSyncCATestType
+XSyncValue delta; XSyncCADelta
+Bool events; XSyncCAEvents
+XSyncAlarmState state; client cannot set this
+</literallayout>
+
+<funcsynopsis id='xsyncdestroyalarm'>
+<funcprototype>
+ <funcdef>Status <function>XSyncDestroyAlarm</function></funcdef>
+ <paramdef>Display<parameter> *dpy</parameter></paramdef>
+ <paramdef>XSyncAlarm<parameter> alarm</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+<function>XSyncDestroyAlarm</function> destroys alarm. It returns
+<function>False</function> if dpy does not support
+the SYNC extension; otherwise, it returns <function>True</function>.
+</para>
+
+<funcsynopsis id='xsyncqueryalarm'>
+<funcprototype>
+ <funcdef>Status <function>XSyncQueryAlarm</function></funcdef>
+ <paramdef>Display<parameter> *dpy</parameter></paramdef>
+ <paramdef>XSyncAlarm<parameter> alarm</parameter></paramdef>
+ <paramdef>XSyncAlarmAttributes<parameter> *values_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+
+<para>
+<function>XSyncQueryAlarm</function> sets *values_return to the alarm’s
+attributes. It returns <function>False</function> if there was an error
+during communication with the server or if dpy does not support the
+SYNC extension; otherwise, it returns <function>True</function>.
+</para>
+
+<funcsynopsis id='xsyncchangealarm'>
+<funcprototype>
+ <funcdef>Status <function>XSyncChangeAlarm</function></funcdef>
+ <paramdef>Display<parameter> *dpy</parameter></paramdef>
+ <paramdef>XSyncAlarm<parameter> alarm</parameter></paramdef>
+ <paramdef>unsigned long<parameter> values_mask</parameter></paramdef>
+ <paramdef>XSyncAlarmAttributes<parameter> *values</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+<function>XSyncChangeAlarm</function> changes alarm’s attributes. The
+attributes to change are specified as in
+<function>XSyncCreateAlarm</function>. It returns
+<function>False</function> if dpy does not support
+the SYNC extension; otherwise, it returns <function>True</function>.
+</para>
+
+<funcsynopsis id='xsyncsetpriority'>
+<funcprototype>
+ <funcdef>Status <function>XSyncSetPriority</function></funcdef>
+ <paramdef>Display<parameter> *dpy</parameter></paramdef>
+ <paramdef>XID<parameter> client_resource_id</parameter></paramdef>
+ <paramdef>int<parameter> priority</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+<function>XSyncSetPriority</function> sets the priority of the client
+owning client_resource_id to priority. If client_resource_id is None, it
+sets the caller’s priority. It returns
+<function>False</function> if dpy does not support the SYNC extension;
+otherwise, it returns <function>True</function>.
+</para>
+
+<funcsynopsis id='xsyncgetpriority'>
+<funcprototype>
+ <funcdef>Status <function>XSyncGetPriority</function></funcdef>
+ <paramdef>Display<parameter> *dpy</parameter></paramdef>
+ <paramdef>XID<parameter> client_resource_id</parameter></paramdef>
+ <paramdef>int<parameter> *return_priority</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+<function>XSyncGetPriority</function> sets *return_priority to the
+priority of the client owning client_resource_id. If client_resource_id
+is None, it sets *return_priority to the caller’s priority. It returns
+<function>False</function> if there was an error during communication
+with the server or if dpy does not support the SYNC extension; otherwise, it
+returns <function>True</function>.
+</para>
+
+</sect1>
+
+<sect1 id="c_macros_functions">
+<title>C Macros/Functions</title>
+
+<para>
+The following procedures manipulate 64-bit values. They are defined both as
+macros and as functions. By default, the macro form is used. To use the
+function form, #undef the macro name to uncover the function.
+</para>
+
+<funcsynopsis id='xsyncinttovalue'>
+<funcprototype>
+ <funcdef>void <function>XSyncIntToValue</function></funcdef>
+ <paramdef>XSyncValue<parameter> *pv</parameter></paramdef>
+ <paramdef>int<parameter> i</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+Converts i to an <function>XSyncValue</function> and stores it in *pv.
+Performs sign extension (*pv will have the same sign as i.)
+</para>
+
+<funcsynopsis id='xsyncintstovalue'>
+<funcprototype>
+ <funcdef>void <function>XSyncIntsToValue</function></funcdef>
+ <paramdef>XSyncValue<parameter> *pv</parameter></paramdef>
+ <paramdef>unsigned int<parameter> low</parameter></paramdef>
+ <paramdef>int<parameter> high</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+Stores low in the low 32 bits of *pv and high in the high 32 bits of *pv.
+</para>
+
+
+<funcsynopsis id='xsyncvaluegreaterthan'>
+<funcprototype>
+ <funcdef>Bool <function>XSyncValueGreaterThan</function></funcdef>
+ <paramdef>XSyncValue<parameter> a</parameter></paramdef>
+ <paramdef>XSyncValue<parameter> b</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+Returns <function>True</function> if a is greater than b, else returns
+<function>False</function>.
+</para>
+
+<funcsynopsis id='xsyncvaluelessthan'>
+<funcprototype>
+ <funcdef>Bool <function>XSyncValueLessThan</function></funcdef>
+ <paramdef>XSyncValue<parameter> a</parameter></paramdef>
+ <paramdef>XSyncValue<parameter> b</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+Returns <function>True</function> if a is less than b, else returns
+<function>False</function>.
+</para>
+
+
+<funcsynopsis id='xsyncvaluegreaterorequal'>
+<funcprototype>
+ <funcdef>Bool <function>XSyncValueGreaterOrEqual</function></funcdef>
+ <paramdef>XSyncValue<parameter> a</parameter></paramdef>
+ <paramdef>XSyncValue<parameter> b</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+Returns <function>True</function> if a is greater than or equal to b,
+else returns <function>False</function>.
+</para>
+
+<funcsynopsis id='xsyncvaluelessorequal'>
+<funcprototype>
+ <funcdef>Bool <function>XSyncValueLessOrEqual</function></funcdef>
+ <paramdef>XSyncValue<parameter> a</parameter></paramdef>
+ <paramdef>XSyncValue<parameter> b</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+Returns <function>True</function> if a is less than or equal to b,
+else returns <function>False</function>.
+</para>
+
+<funcsynopsis id='xsyncvalueequal'>
+<funcprototype>
+ <funcdef>Bool <function>XSyncValueEqual</function></funcdef>
+ <paramdef>XSyncValue<parameter> a</parameter></paramdef>
+ <paramdef>XSyncValue<parameter> b</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+Returns <function>True</function> if a is equal to b,
+else returns <function>False</function>.
+</para>
+
+<funcsynopsis id='xsyncvalueisnegative'>
+<funcprototype>
+ <funcdef>Bool <function>XSyncValueIsNegative</function></funcdef>
+ <paramdef>XSyncValue<parameter> v</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+Returns <function>True</function> if v is negative,
+else returns <function>False</function>.
+</para>
+
+<funcsynopsis id='xsyncvalueiszero'>
+<funcprototype>
+ <funcdef>Bool <function>XSyncValueIsZero</function></funcdef>
+ <paramdef>XSyncValue<parameter> v</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+Returns <function>True</function> if v is zero,
+else returns <function>False</function>.
+</para>
+
+<funcsynopsis id='xsyncvalueispositive'>
+<funcprototype>
+ <funcdef>Bool <function>XSyncValueIsPositive</function></funcdef>
+ <paramdef>XSyncValue<parameter> v</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+Returns <function>True</function> if v is positive,
+else returns <function>False</function>.
+</para>
+
+<funcsynopsis id='xsyncvaluelow32'>
+<funcprototype>
+ <funcdef>unsigned int <function>XSyncValueLow32</function></funcdef>
+ <paramdef>XSyncValue<parameter> v</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+Returns the low 32 bits of v.
+</para>
+
+<funcsynopsis id='xsyncvaluehigh32'>
+<funcprototype>
+ <funcdef>unsigned int <function>XSyncValueHigh32</function></funcdef>
+ <paramdef>XSyncValue<parameter> v</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+Returns the high 32 bits of v.
+</para>
+
+<funcsynopsis id='xsyncvalueadd'>
+<funcprototype>
+ <funcdef>void <function>XSyncValueAdd</function></funcdef>
+ <paramdef>XSyncValue<parameter> *presult</parameter></paramdef>
+ <paramdef>XSyncValue<parameter> a</parameter></paramdef>
+ <paramdef>XSyncValue<parameter> b</parameter></paramdef>
+ <paramdef>Bool<parameter> *poverflow</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+Adds a to b and stores the result in *presult. If the result could not
+fit in 64 bits, *poverflow is set to <function>True</function>, else it is
+set to <function>False</function>.
+</para>
+
+<funcsynopsis id='xsyncvaluesubtract'>
+<funcprototype>
+ <funcdef>void <function>XSyncValueSubtract</function></funcdef>
+ <paramdef>XSyncValue<parameter> *presult</parameter></paramdef>
+ <paramdef>XSyncValue<parameter> a</parameter></paramdef>
+ <paramdef>XSyncValue<parameter> b</parameter></paramdef>
+ <paramdef>Bool<parameter> *poverflow</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+Subtracts b from a and stores the result in *presult. If the result could not
+fit in 64 bits, *poverflow is set to <function>True</function>, else it is
+set to <function>False</function>.
+</para>
+
+<funcsynopsis id='xsyncmaxvalue'>
+<funcprototype>
+ <funcdef>void <function>XSyncMaxValue</function></funcdef>
+ <paramdef>XSyncValue<parameter> *pv</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+Sets *pv to the maximum value expressible in 64 bits.
+</para>
+
+<funcsynopsis id='xsyncminvalue'>
+<funcprototype>
+ <funcdef>void <function>XSyncMinValue</function></funcdef>
+ <paramdef>XSyncValue<parameter> *pv</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+Sets *pv to the minimum value expressible in 64 bits.
+</para>
+
+</sect1>
+
+<sect1 id="events">
+<title>Events</title>
+
+<para>
+Let <emphasis remap='I'>event_base</emphasis> be the value event base return as defined in the function
+<function>XSyncQueryExtension</function>.
+</para>
+
+<para>
+An <function>XSyncCounterNotifyEvent</function>’s type field has the value
+event_base + <function>XSyncCounterNotify</function>. The fields of this
+structure are:
+</para>
+
+<literallayout remap='Ds'>
+int type; /* event base + XSyncCounterNotify */
+unsigned long serial; /* number of last request processed by server */
+Bool send event; /* true if this came from a SendEvent request */
+Display * display; /* Display the event was read from */
+XSyncCounter counter; /* counter involved in await */
+XSyncValue wait_value; /* value being waited for */
+XSyncValue counter_value; /* counter value when this event was sent */
+Time time; /* milliseconds */
+int count; /* how many more events to come */
+Bool destroyed; /* True if counter was destroyed */
+</literallayout>
+
+<para>
+An <function>XSyncAlarmNotifyEvent</function>’s type field has the value
+event_base + <function>XSyncAlarmNotify</function>. The fields of
+this structure are:
+</para>
+
+<literallayout remap='Ds'>
+int type; /* event_base + XSyncAlarmNotify */
+unsigned long serial; /* number of last request processed by server */
+Bool send_event; /* true if this came from a SendEvent request */
+Display * display; /*Display the event was read from */
+XSyncAlarm alarm; /* alarm that triggered */
+XSyncValue counter_value /* value that triggered the alarm */
+XSyncValue alarm_value /* test value of trigger in alarm */
+Time time; /* milliseconds */
+XSyncAlarmState state; /* new state of alarm */
+</literallayout>
+
+</sect1>
+
+<sect1 id="errors">
+<title>Errors</title>
+<para>
+Let <emphasis remap='I'>error_base</emphasis> be the value
+<emphasis remap='I'>error_base_return</emphasis> as defined in the function
+<function>XSyncQueryExtension</function>.
+</para>
+
+<para>
+An <function>XSyncAlarmError</function>’s error_code field has
+<function>XSyncBadAlarm</function>. The fields of this structure are:
+</para>
+
+<literallayout remap='Ds'>
+int type
+Display * display; /* Display the event was read from */
+XSyncCounter counter; /* resource id */
+unsigned long serial; /* serial number of failed request */
+unsigned char error_code; /* error_base + XSyncBadAlarm */
+unsigned char request_code; /* Major op-code of failed request */
+unsigned char minor_code; /* Minor op-code of failed request */
+</literallayout>
+
+<para>
+An <function>XSyncCounterError</function>’s error code field has the value
+error_base + <function>XSyncBadCounter</function>. The fields of this
+structure are:
+</para>
+<literallayout remap='Ds'>
+int type
+Display * display; /* Display the event was read from */
+XSyncCounter counter; /* resource id */
+unsigned long serial; /* serial number of failed request */
+unsigned char error_code; /* error_base + XSyncBadCounter */
+unsigned char request_code; /* Major op-code of failed request */
+unsigned char minor_code; /* Minor op-code of failed request */
+</literallayout>
+
+</sect1>
+</chapter>
+</book>