10f8248bfSmrg<?xml version="1.0" encoding="UTF-8" ?>
20f8248bfSmrg<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
30f8248bfSmrg	  "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
4eb411b4bSmrg<chapter id='Debugging_Aids'>
5e9fcaa8aSmrg<title>Debugging Aids</title>
6e9fcaa8aSmrg
7e9fcaa8aSmrg<para>
8e9fcaa8aSmrgThe debugging aids are intended for use primarily by Xkb implementors and are
9e9fcaa8aSmrgoptional in any implementation.
10e9fcaa8aSmrg</para>
11e9fcaa8aSmrg
12e9fcaa8aSmrg
13e9fcaa8aSmrg<para>
14e9fcaa8aSmrgThere are two bitmasks that may be used to control debugging. One bitmask
15e9fcaa8aSmrgcontrols the output of debugging information, and the other controls behavior.
16e9fcaa8aSmrgBoth bitmasks are initially all zeros.
17e9fcaa8aSmrg</para>
18e9fcaa8aSmrg
19e9fcaa8aSmrg
20e9fcaa8aSmrg<para>
210f8248bfSmrgTo change the values of any of the debug controls, use
220f8248bfSmrg<function>XkbSetDebuggingFlags</function>.
23e9fcaa8aSmrg</para>
24e9fcaa8aSmrg
250f8248bfSmrg<indexterm significance="preferred" zone="XkbSetDebuggingFlags"><primary><function>XkbSetDebuggingFlags</function></primary></indexterm>
260f8248bfSmrg<funcsynopsis id="XkbSetDebuggingFlags">
270f8248bfSmrg  <funcprototype>
280f8248bfSmrg    <funcdef>Bool <function>XkbSetDebuggingFlags</function></funcdef>
290f8248bfSmrg<!-- (
300f8248bfSmrg<parameter>display, mask, flags, msg, ctrls_mask, ctrls, ret_flags, ret_ctrls</parameter>
310f8248bfSmrg) -->
320f8248bfSmrg
330f8248bfSmrg    <paramdef>Display *<parameter>display</parameter></paramdef>
340f8248bfSmrg    <paramdef>unsigned int <parameter>mask</parameter></paramdef>
350f8248bfSmrg    <paramdef>unsigned int <parameter>flags</parameter></paramdef>
360f8248bfSmrg    <paramdef>char *<parameter>msg</parameter></paramdef>
370f8248bfSmrg    <paramdef>unsigned int <parameter>ctrls_mask</parameter></paramdef>
380f8248bfSmrg    <paramdef>unsigned int <parameter>ctrls</parameter></paramdef>
390f8248bfSmrg    <paramdef>unsigned int *<parameter>ret_flags</parameter></paramdef>
400f8248bfSmrg    <paramdef>unsigned int *<parameter>ret_ctrls</parameter></paramdef>
410f8248bfSmrg  </funcprototype>
420f8248bfSmrg</funcsynopsis>
430f8248bfSmrg<variablelist>
440f8248bfSmrg  <varlistentry>
450f8248bfSmrg    <term>
460f8248bfSmrg      <parameter>display</parameter>
470f8248bfSmrg    </term>
480f8248bfSmrg    <listitem>
490f8248bfSmrg      <para>
500f8248bfSmrg        connection to X server
510f8248bfSmrg      </para>
520f8248bfSmrg    </listitem>
530f8248bfSmrg  </varlistentry>
540f8248bfSmrg  <varlistentry>
550f8248bfSmrg    <term>
560f8248bfSmrg      <parameter>mask</parameter>
570f8248bfSmrg    </term>
580f8248bfSmrg    <listitem>
590f8248bfSmrg      <para>
600f8248bfSmrg        mask selecting debug output flags to change
610f8248bfSmrg      </para>
620f8248bfSmrg    </listitem>
630f8248bfSmrg  </varlistentry>
640f8248bfSmrg  <varlistentry>
650f8248bfSmrg    <term>
660f8248bfSmrg      <parameter>flags</parameter>
670f8248bfSmrg    </term>
680f8248bfSmrg    <listitem>
690f8248bfSmrg      <para>
700f8248bfSmrg        values for debug output flags selected by <parameter>mask</parameter>
710f8248bfSmrg      </para>
720f8248bfSmrg    </listitem>
730f8248bfSmrg  </varlistentry>
740f8248bfSmrg  <varlistentry>
750f8248bfSmrg    <term>
760f8248bfSmrg      <parameter>msg</parameter>
770f8248bfSmrg    </term>
780f8248bfSmrg    <listitem>
790f8248bfSmrg      <para>
800f8248bfSmrg        message to print right now
810f8248bfSmrg      </para>
820f8248bfSmrg    </listitem>
830f8248bfSmrg  </varlistentry>
840f8248bfSmrg  <varlistentry>
850f8248bfSmrg    <term>
860f8248bfSmrg      <parameter>ctrls_mask</parameter>
870f8248bfSmrg    </term>
880f8248bfSmrg    <listitem>
890f8248bfSmrg      <para>
900f8248bfSmrg        mask selecting debug controls to change
910f8248bfSmrg      </para>
920f8248bfSmrg    </listitem>
930f8248bfSmrg  </varlistentry>
940f8248bfSmrg  <varlistentry>
950f8248bfSmrg    <term>
960f8248bfSmrg      <parameter>ctrls</parameter>
970f8248bfSmrg    </term>
980f8248bfSmrg    <listitem>
990f8248bfSmrg      <para>
1000f8248bfSmrg        values for debug controls selected by <parameter>ctrls_mask</parameter>
1010f8248bfSmrg      </para>
1020f8248bfSmrg    </listitem>
1030f8248bfSmrg  </varlistentry>
1040f8248bfSmrg  <varlistentry>
1050f8248bfSmrg    <term>
1060f8248bfSmrg      <parameter>ret_flags</parameter>
1070f8248bfSmrg    </term>
1080f8248bfSmrg    <listitem>
1090f8248bfSmrg      <para>
1100f8248bfSmrg        resulting state of all debug output flags
1110f8248bfSmrg      </para>
1120f8248bfSmrg    </listitem>
1130f8248bfSmrg  </varlistentry>
1140f8248bfSmrg  <varlistentry>
1150f8248bfSmrg    <term>
1160f8248bfSmrg      <parameter>ret_ctrls</parameter>
1170f8248bfSmrg    </term>
1180f8248bfSmrg    <listitem>
1190f8248bfSmrg      <para>
1200f8248bfSmrg        resulting state of all debug controls
1210f8248bfSmrg      </para>
1220f8248bfSmrg    </listitem>
1230f8248bfSmrg  </varlistentry>
1240f8248bfSmrg</variablelist>
125e9fcaa8aSmrg
126e9fcaa8aSmrg<para>
1270f8248bfSmrg<function>XkbSetDebuggingFlags</function>
1280f8248bfSmrgmodifies the debug output flags as specified by
1290f8248bfSmrg<parameter>mask</parameter>
1300f8248bfSmrgand
1310f8248bfSmrg<parameter>flags</parameter>,
1320f8248bfSmrgmodifies the debug controls flags as specified by
1330f8248bfSmrg<parameter>ctrls_mask</parameter>
1340f8248bfSmrgand
1350f8248bfSmrg<parameter>ctrls</parameter>,
1360f8248bfSmrgprints the message
1370f8248bfSmrg<parameter>msg</parameter>,
1380f8248bfSmrgand backfills
1390f8248bfSmrg<parameter>ret_flags</parameter>
1400f8248bfSmrgand
1410f8248bfSmrg<parameter>ret_ctrls</parameter>
1420f8248bfSmrgwith the resulting debug output and debug controls flags.
143e9fcaa8aSmrg</para>
144e9fcaa8aSmrg
145e9fcaa8aSmrg
146e9fcaa8aSmrg<para>
1470f8248bfSmrgWhen bits are set in the debug output masks,
1480f8248bfSmrg<parameter>mask</parameter>
1490f8248bfSmrgand
1500f8248bfSmrg<parameter>flags</parameter>,
1510f8248bfSmrgXkb prints debug information corresponding to each bit at appropriate points
152e9fcaa8aSmrgduring its processing. The device to which the output is written is
153e9fcaa8aSmrgimplementation-dependent, but is normally the same device to which X server
1540f8248bfSmrgerror messages are directed; thus the bits that can be set in
1550f8248bfSmrg<parameter>mask</parameter>
1560f8248bfSmrgand
1570f8248bfSmrg<parameter>flags</parameter>
1580f8248bfSmrgis implementation-specific. To turn on a debug output selection, set the bit
1590f8248bfSmrgfor the output in the
1600f8248bfSmrg<parameter>mask</parameter>
1610f8248bfSmrgparameter and set the corresponding bit in the
1620f8248bfSmrg<parameter>flags</parameter>
1630f8248bfSmrgparameter. To turn off event selection for an event, set the bit for the
1640f8248bfSmrgoutput in the
1650f8248bfSmrg<parameter>mask</parameter>
1660f8248bfSmrgparameter and do not set the corresponding bit in the
1670f8248bfSmrg<parameter>flags</parameter>
1680f8248bfSmrgparameter.
169e9fcaa8aSmrg</para>
170e9fcaa8aSmrg
171e9fcaa8aSmrg
172e9fcaa8aSmrg<para>
1730f8248bfSmrgWhen bits are set in the debug controls masks,
1740f8248bfSmrg<parameter>ctrls_mask</parameter>
1750f8248bfSmrgand
1760f8248bfSmrg<parameter>ctrls</parameter>,
1770f8248bfSmrgXkb modifies its behavior according to each controls bit.
1780f8248bfSmrg<parameter>ctrls_mask</parameter>
1790f8248bfSmrgand
1800f8248bfSmrg<parameter>ctrls</parameter>
1810f8248bfSmrgare related in the same way that
1820f8248bfSmrg<parameter>mask</parameter>
1830f8248bfSmrgand
1840f8248bfSmrg<parameter>flags</parameter>
1850f8248bfSmrgare. The valid controls bits are defined in
1860f8248bfSmrg<link linkend="table22.1">Table 22.1</link>.
187e9fcaa8aSmrg</para>
188e9fcaa8aSmrg
1890f8248bfSmrg<table id='table22.1' frame='topbot'>
190e9fcaa8aSmrg<title>Debug Control Masks</title>
191eb411b4bSmrg<?dbfo keep-together="always" ?>
192eb411b4bSmrg<tgroup cols='3' align='left' colsep='0' rowsep='0'>
193eb411b4bSmrg<colspec colname='c1' colwidth='1.5*'/>
194eb411b4bSmrg<colspec colname='c2' colwidth='1.0*'/>
195eb411b4bSmrg<colspec colname='c3' colwidth='2.0*'/>
196e9fcaa8aSmrg<thead>
197eb411b4bSmrg<row rowsep='1'>
198e9fcaa8aSmrg  <entry>Debug Control Mask</entry>
199e9fcaa8aSmrg  <entry>Value</entry>
200e9fcaa8aSmrg  <entry>Meaning</entry>
201e9fcaa8aSmrg</row>
202e9fcaa8aSmrg</thead>
203e9fcaa8aSmrg<tbody>
204eb411b4bSmrg<row>
2050f8248bfSmrg    <entry><symbol>XkbDF_DisableLocks</symbol></entry>
206e9fcaa8aSmrg    <entry>(1 &lt;&lt; 0)</entry>
207e9fcaa8aSmrg    <entry>Disable actions that lock modifiers</entry>
208e9fcaa8aSmrg  </row>
209e9fcaa8aSmrg</tbody>
210e9fcaa8aSmrg</tgroup>
211e9fcaa8aSmrg</table>
212e9fcaa8aSmrg
213e9fcaa8aSmrg<para>
2140f8248bfSmrg<function>XkbSetDebuggingFlags</function>
2150f8248bfSmrgreturns
2160f8248bfSmrg<symbol>True</symbol>
2170f8248bfSmrgif successful and
2180f8248bfSmrg<symbol>False</symbol>
2190f8248bfSmrgotherwise. The only protocol error it may generate is
2200f8248bfSmrg<errorname>BadAlloc</errorname>,
2210f8248bfSmrgif for some reason it is unable to allocate storage.
222e9fcaa8aSmrg</para>
223e9fcaa8aSmrg
224e9fcaa8aSmrg
225e9fcaa8aSmrg<para>
2260f8248bfSmrg<function>XkbSetDebuggingFlags</function>
2270f8248bfSmrgis intended for developer use and may be disabled in production X servers. If
2280f8248bfSmrgit is disabled,
2290f8248bfSmrg<function>XkbSetDebuggingFlags</function>
2300f8248bfSmrghas no effect and does not generate any protocol errors.
231e9fcaa8aSmrg</para>
232e9fcaa8aSmrg
233e9fcaa8aSmrg
234e9fcaa8aSmrg<para>
2350f8248bfSmrgThe message in
2360f8248bfSmrg<parameter>msg</parameter>
2370f8248bfSmrgis written immediately. The device to which it is written is implementation
238e9fcaa8aSmrgdependent but is normally the same device where X server error messages are
239e9fcaa8aSmrgdirected.
240e9fcaa8aSmrg</para>
241e9fcaa8aSmrg</chapter>
242