1e9fcaa8aSmrg<?xml version="1.0" encoding="UTF-8" ?>
2e9fcaa8aSmrg<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
3eb411b4bSmrg                   "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
4eb411b4bSmrg[
5eb411b4bSmrg<!ENTITY % defs SYSTEM "defs.ent"> %defs;
6eb411b4bSmrg]>
7e9fcaa8aSmrg
857f47464Smrg<book id="trans">
9e9fcaa8aSmrg
10e9fcaa8aSmrg<bookinfo>
11e9fcaa8aSmrg   <title>The XIM Transport Specification</title>
12e9fcaa8aSmrg   <subtitle>Revision 0.1</subtitle>
13eb411b4bSmrg   <releaseinfo>X Version 11, Release &fullrelvers;</releaseinfo>
14e9fcaa8aSmrg   <authorgroup>
15e9fcaa8aSmrg      <author>
16e9fcaa8aSmrg         <firstname>Takashi</firstname><surname>Fujiwara</surname>
17e9fcaa8aSmrg         <affiliation><orgname>FUJITSU LIMITED</orgname></affiliation>
18e9fcaa8aSmrg      </author>
19e9fcaa8aSmrg   </authorgroup>
20e9fcaa8aSmrg   <copyright><year>1994</year><holder>FUJITSU LIMITED</holder></copyright>
21e9fcaa8aSmrg
22e9fcaa8aSmrg<abstract>
23eb411b4bSmrg<title>Abstract</title>
24e9fcaa8aSmrg<para>
25e9fcaa8aSmrgThis specification describes the transport layer interfaces between Xlib and IM Server,
26e9fcaa8aSmrgwhich makes various channels usable such as X protocol or TCP/IP, DECnet and etc.
27e9fcaa8aSmrg</para>
28e9fcaa8aSmrg</abstract>
29e9fcaa8aSmrg
30e9fcaa8aSmrg<legalnotice>
31e9fcaa8aSmrg
32eb411b4bSmrg<para>
33eb411b4bSmrgPermission to use, copy, modify, and distribute this documentation for any purpose 
34eb411b4bSmrgand without fee is hereby granted, provided that the above copyright notice and
35eb411b4bSmrgthis permission notice appear in all copies.
36eb411b4bSmrgFujitsu makes no representations about the suitability for any purpose of the
37eb411b4bSmrginformation in this document. This documentation is provided as is
38eb411b4bSmrgwithout express or implied warranty.
39eb411b4bSmrg</para>
40eb411b4bSmrg
41eb411b4bSmrg<para role="multiLicensing">Copyright © 1994 X Consortium</para>
42e9fcaa8aSmrg<para>
43e9fcaa8aSmrgPermission is hereby granted, free of charge, to any person obtaining a copy
44e9fcaa8aSmrgof this software and associated documentation files
45e9fcaa8aSmrg(the &ldquo;Software&rdquo;), to deal in the Software without restriction,
46e9fcaa8aSmrgincluding without limitation the rights to use, copy, modify, merge, publish,
47e9fcaa8aSmrgdistribute, sublicense, and/or sell copies of the Software, and to permit
48e9fcaa8aSmrgpersons to whom the Software is furnished to do so, subject to the following
49e9fcaa8aSmrgconditions:
50e9fcaa8aSmrg</para>
51e9fcaa8aSmrg
52e9fcaa8aSmrg<para>
53e9fcaa8aSmrgThe above copyright notice and this permission notice shall be included in all
54e9fcaa8aSmrgcopies or substantial portions of the Software.
55e9fcaa8aSmrg</para>
56e9fcaa8aSmrg
57e9fcaa8aSmrg<para>
58e9fcaa8aSmrgTHE SOFTWARE IS PROVIDED &ldquo;AS IS&rdquo;, WITHOUT WARRANTY OF ANY KIND,
59e9fcaa8aSmrgEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
60e9fcaa8aSmrgMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN
61e9fcaa8aSmrgNO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
62e9fcaa8aSmrgLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
63e9fcaa8aSmrgOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
64e9fcaa8aSmrgTHE SOFTWARE.
65e9fcaa8aSmrg</para>
66e9fcaa8aSmrg
67e9fcaa8aSmrg<para>
68eb411b4bSmrgExcept as contained in this notice, the name of the X Consortium shall not be
69eb411b4bSmrgused in advertising or otherwise to promote the sale, use or other dealings in
70eb411b4bSmrgthis Software without prior written authorization from the X Consortium.
71e9fcaa8aSmrg</para>
72e9fcaa8aSmrg
73e9fcaa8aSmrg<para>X Window System is a trademark of The Open Group.</para>
74e9fcaa8aSmrg
75e9fcaa8aSmrg</legalnotice>
76e9fcaa8aSmrg</bookinfo>
77e9fcaa8aSmrg
78eb411b4bSmrg<chapter id='X_Transport_Specification'>
79e9fcaa8aSmrg<title>X Transport Specification</title>
80e9fcaa8aSmrg
81e9fcaa8aSmrg<sect1 id="Introduction">
82e9fcaa8aSmrg<title>Introduction</title>
83e9fcaa8aSmrg<!-- .XS -->
84e9fcaa8aSmrg<!-- (SN Introduction -->
85e9fcaa8aSmrg<!-- .XE -->
86e9fcaa8aSmrg<para>
87e9fcaa8aSmrg<!-- .LP -->
88e9fcaa8aSmrgThe Xlib XIM implementation is layered into three functions, a protocol
89e9fcaa8aSmrglayer, an interface layer and a transport layer. The purpose of this
90e9fcaa8aSmrglayering is to make the protocol independent of transport implementation.
91e9fcaa8aSmrgEach function of these layers are:
92e9fcaa8aSmrg<!-- .RS 3 -->
93e9fcaa8aSmrg</para>
94e9fcaa8aSmrg<variablelist>
95e9fcaa8aSmrg  <varlistentry>
96e9fcaa8aSmrg    <term><emphasis>The protocol layer</emphasis></term>
97e9fcaa8aSmrg    <listitem>
98e9fcaa8aSmrg      <para>
99e9fcaa8aSmrgimplements overall function of XIM and calls the interface layer
100e9fcaa8aSmrgfunctions when it needs to communicate to IM Server.
101e9fcaa8aSmrg      </para>
102e9fcaa8aSmrg    </listitem>
103e9fcaa8aSmrg  </varlistentry>
104e9fcaa8aSmrg  <varlistentry>
105e9fcaa8aSmrg    <term><emphasis>The interface layer</emphasis></term>
106e9fcaa8aSmrg    <listitem>
107e9fcaa8aSmrg      <para>
108e9fcaa8aSmrgseparates the implementation of the transport layer from the protocol
109e9fcaa8aSmrglayer, in other words, it provides implementation independent hook for
110e9fcaa8aSmrgthe transport layer functions.
111e9fcaa8aSmrg      </para>
112e9fcaa8aSmrg    </listitem>
113e9fcaa8aSmrg  </varlistentry>
114e9fcaa8aSmrg
115e9fcaa8aSmrg  <varlistentry>
116e9fcaa8aSmrg    <term><emphasis>The transport layer</emphasis></term>
117e9fcaa8aSmrg    <listitem>
118e9fcaa8aSmrg      <para>
119e9fcaa8aSmrghandles actual data communication with IM Server. It is done by a set
120e9fcaa8aSmrgof several functions named transporters.
121e9fcaa8aSmrg      </para>
122e9fcaa8aSmrg    </listitem>
123e9fcaa8aSmrg  </varlistentry>
124e9fcaa8aSmrg</variablelist>
125e9fcaa8aSmrg
126e9fcaa8aSmrg<para>
127e9fcaa8aSmrgThis specification describes the interface layer and the transport
128e9fcaa8aSmrglayer, which makes various communication channels usable such as
129e9fcaa8aSmrgX protocol or, TCP/IP, DECnet, STREAM, etc., and provides
130e9fcaa8aSmrgthe information needed for adding another new transport layer.
131e9fcaa8aSmrgIn addition, sample implementations for the transporter using the
132e9fcaa8aSmrgX connection is described in section 4. <!-- xref -->
133e9fcaa8aSmrg</para>
134e9fcaa8aSmrg</sect1>
135e9fcaa8aSmrg
136e9fcaa8aSmrg<sect1 id="Initialization">
137e9fcaa8aSmrg<title>Initialization</title>
138e9fcaa8aSmrg
139e9fcaa8aSmrg<sect2 id="Registering_structure_to_initialize">
140e9fcaa8aSmrg<title>Registering structure to initialize</title>
141e9fcaa8aSmrg
142e9fcaa8aSmrg<para>
143e9fcaa8aSmrgThe structure typed as TransportSW contains the list of the transport
144e9fcaa8aSmrglayer the specific implementations supports.
145e9fcaa8aSmrg</para>
146e9fcaa8aSmrg
147e9fcaa8aSmrg<literallayout class="monospaced">
148e9fcaa8aSmrgtypedef struct {
149e9fcaa8aSmrg      char *transport_name;
150e9fcaa8aSmrg      Bool (*config);
151e9fcaa8aSmrg} TransportSW;
152e9fcaa8aSmrg</literallayout>
153e9fcaa8aSmrg
154e9fcaa8aSmrg<informaltable frame="none">
155eb411b4bSmrg  <?dbfo keep-together="always" ?>
156eb411b4bSmrg  <tgroup cols="2" align='left' colsep='0' rowsep='0'>
157eb411b4bSmrg  <colspec colname="col1" colwidth='1.0*'/>
158eb411b4bSmrg  <colspec colname="col2" colwidth='1.0*'/>
159e9fcaa8aSmrg  <tbody>
160eb411b4bSmrg    <row>
161e9fcaa8aSmrg      <entry><emphasis>transport_name</emphasis></entry>
162e9fcaa8aSmrg      <entry>name of transport<footnote><para>Refer to "The Input Method Protocol: Appendix B</para></footnote></entry>
163e9fcaa8aSmrg    </row>
164eb411b4bSmrg    <row>
165e9fcaa8aSmrg      <entry><emphasis>config</emphasis></entry>
166e9fcaa8aSmrg      <entry>initial configuration function</entry>
167e9fcaa8aSmrg    </row>
168e9fcaa8aSmrg  </tbody>
169e9fcaa8aSmrg  </tgroup>
170e9fcaa8aSmrg</informaltable>
171e9fcaa8aSmrg
172e9fcaa8aSmrg<para>
173e9fcaa8aSmrgA sample entry for the Xlib supporting transporters is shown below:
174e9fcaa8aSmrg</para>
175e9fcaa8aSmrg
176e9fcaa8aSmrg<literallayout class="monospaced">
177e9fcaa8aSmrgTransportSW _XimTransportRec[] = {
178e9fcaa8aSmrg/*     char <emphasis remap='I'>*</emphasis>:
179e9fcaa8aSmrg *     transport_name,     Bool <emphasis remap='I'>(*config)()</emphasis>
180e9fcaa8aSmrg */
181e9fcaa8aSmrg      "X",             _XimXConf,
182e9fcaa8aSmrg      "tcp",           _XimTransConf,
183e9fcaa8aSmrg      "local",         _XimTransConf,
184e9fcaa8aSmrg      "decnet",        _XimTransConf,
185e9fcaa8aSmrg      "streams",       _XimTransConf,
186e9fcaa8aSmrg      (char *)NULL,    (Bool (*)())NULL,
187e9fcaa8aSmrg};
188e9fcaa8aSmrg</literallayout>
189e9fcaa8aSmrg
190e9fcaa8aSmrg</sect2>
191e9fcaa8aSmrg<sect2 id="Initialization_function">
192e9fcaa8aSmrg<title>Initialization function</title>
193e9fcaa8aSmrg<!-- .XS -->
194e9fcaa8aSmrg<!-- (SN Initialization function -->
195e9fcaa8aSmrg<!-- .XE -->
196e9fcaa8aSmrg<para>
197e9fcaa8aSmrgThe following function will be called once when Xlib configures the
198e9fcaa8aSmrgtransporter functions.
199e9fcaa8aSmrg</para>
200e9fcaa8aSmrg
201e9fcaa8aSmrg<funcsynopsis>
202e9fcaa8aSmrg<funcprototype>
203e9fcaa8aSmrg  <funcdef>Bool <function>(*config)</function></funcdef>
204e9fcaa8aSmrg  <paramdef>XIM<parameter> im</parameter></paramdef>
205e9fcaa8aSmrg  <paramdef>char<parameter> *transport_data</parameter></paramdef>
206e9fcaa8aSmrg</funcprototype>
207e9fcaa8aSmrg</funcsynopsis>
208e9fcaa8aSmrg
209e9fcaa8aSmrg<variablelist>
210e9fcaa8aSmrg  <varlistentry>
211e9fcaa8aSmrg    <term>
212e9fcaa8aSmrg      <emphasis remap='I'>im</emphasis>
213e9fcaa8aSmrg    </term>
214e9fcaa8aSmrg    <listitem>
215e9fcaa8aSmrg      <para>
216e9fcaa8aSmrgSpecifies XIM structure address.
217e9fcaa8aSmrg      </para>
218e9fcaa8aSmrg    </listitem>
219e9fcaa8aSmrg  </varlistentry>
220e9fcaa8aSmrg  <varlistentry>
221e9fcaa8aSmrg    <term>
222e9fcaa8aSmrg      <emphasis remap='I'>transport_data</emphasis>
223e9fcaa8aSmrg    </term>
224e9fcaa8aSmrg    <listitem>
225e9fcaa8aSmrg      <para>
226e9fcaa8aSmrgSpecifies the data specific to the transporter, in IM Server address.<footnote><para>Refer to "The Input Method Protocol: Appendix B</para></footnote>
227e9fcaa8aSmrg    </para>
228e9fcaa8aSmrg  </listitem>
229e9fcaa8aSmrg  </varlistentry>
230e9fcaa8aSmrg</variablelist>
231e9fcaa8aSmrg
232e9fcaa8aSmrg<para>
233e9fcaa8aSmrgThis function must setup the transporter function pointers.
234e9fcaa8aSmrg</para>
235e9fcaa8aSmrg
236e9fcaa8aSmrg<para>
237e9fcaa8aSmrg<!-- .LP -->
238e9fcaa8aSmrgThe actual <emphasis remap='I'>config</emphasis> function will be chosen by IM Server at the
239e9fcaa8aSmrgpre-connection time, matching by the <emphasis remap='I'>transport_name</emphasis> specified
240e9fcaa8aSmrgin the <function>_XimTransportRec</function> array; The specific members of XimProto
241e9fcaa8aSmrgstructure listed below must be initialized so that point they
242e9fcaa8aSmrgappropriate transporter functions.
243e9fcaa8aSmrg</para>
244e9fcaa8aSmrg
245e9fcaa8aSmrg<para>
246e9fcaa8aSmrgIf the specified transporter has been configured successfully, this
247e9fcaa8aSmrgfunction returns True. There is no Alternative Entry for config
248e9fcaa8aSmrgfunction itself.
249e9fcaa8aSmrg</para>
250e9fcaa8aSmrg
251e9fcaa8aSmrg<para>
252e9fcaa8aSmrgThe structure XimProto contains the following function pointers:
253e9fcaa8aSmrg</para>
254e9fcaa8aSmrg
255e9fcaa8aSmrg<literallayout class="monospaced">
256e9fcaa8aSmrgBool (*connect)();               /* Open connection */
257e9fcaa8aSmrgBool (*shutdown)();              /* Close connection */
258e9fcaa8aSmrgBool (*write)();                 /* Write data */
259e9fcaa8aSmrgBool (*read)();                  /* Read data */
260e9fcaa8aSmrgBool (*flush)();                 /* Flush data buffer */
261e9fcaa8aSmrgBool (*register_dispatcher)();   /* Register asynchronous data handler */
262e9fcaa8aSmrgBool (*call_dispatcher)();       /* Call dispatcher */
263e9fcaa8aSmrg</literallayout>
264e9fcaa8aSmrg
265e9fcaa8aSmrg<para>
266e9fcaa8aSmrgThese functions are called when Xlib needs to communicate the
267e9fcaa8aSmrgIM Server. These functions must process the appropriate procedure
268e9fcaa8aSmrgdescribed below.
269e9fcaa8aSmrg</para>
270e9fcaa8aSmrg
271e9fcaa8aSmrg</sect2>
272e9fcaa8aSmrg</sect1>
273eb411b4bSmrg<sect1 id='The_interfacetransport_layer_functions'>
274e9fcaa8aSmrg<title>The interface/transport layer functions</title>
275e9fcaa8aSmrg<para>
276e9fcaa8aSmrgFollowing functions are used for the transport interface.
277e9fcaa8aSmrg</para>
278e9fcaa8aSmrg
279e9fcaa8aSmrg<table frame="all" id="transport_layer_functions_2">
280eb411b4bSmrg  <?dbfo keep-together="always" ?>
281e9fcaa8aSmrg  <title>The Transport Layer Functions</title>
282eb411b4bSmrg  <tgroup cols="3" align='left' colsep='1' rowsep='1'>
283eb411b4bSmrg  <colspec colname="col1" colwidth="3.0*"/>
284eb411b4bSmrg  <colspec colname="col2" colwidth="3.0*"/>
285eb411b4bSmrg  <colspec colname="col3" colwidth='1.0*'/>
286e9fcaa8aSmrg  <thead>
287e9fcaa8aSmrg    <row>
288eb411b4bSmrg      <entry align='center'>Alternate Entry (Interface Layer)</entry>
289eb411b4bSmrg      <entry align='center'>XimProto member (Transport Layer)</entry>
290eb411b4bSmrg      <entry align='center'>Section</entry>
291e9fcaa8aSmrg    </row>
292e9fcaa8aSmrg  </thead>
293e9fcaa8aSmrg  <tbody>
294e9fcaa8aSmrg    <row>
295e9fcaa8aSmrg      <entry>_XimConnect</entry>
296e9fcaa8aSmrg      <entry>connect</entry>
297e9fcaa8aSmrg      <entry>3.1</entry>
298e9fcaa8aSmrg    </row>
299e9fcaa8aSmrg    <row>
300e9fcaa8aSmrg      <entry>_XimShutdown</entry>
301e9fcaa8aSmrg      <entry>shutdown</entry>
302e9fcaa8aSmrg      <entry>3.2</entry>
303e9fcaa8aSmrg    </row>
304e9fcaa8aSmrg    <row>
305e9fcaa8aSmrg      <entry>_XimWrite</entry>
306e9fcaa8aSmrg      <entry>write</entry>
307e9fcaa8aSmrg      <entry>3.3</entry>
308e9fcaa8aSmrg    </row>
309e9fcaa8aSmrg    <row>
310e9fcaa8aSmrg      <entry>_XimRead</entry>
311e9fcaa8aSmrg      <entry>read</entry>
312e9fcaa8aSmrg      <entry>3.4</entry>
313e9fcaa8aSmrg    </row>
314e9fcaa8aSmrg    <row>
315e9fcaa8aSmrg      <entry>_XimFlush</entry>
316e9fcaa8aSmrg      <entry>flush</entry>
317e9fcaa8aSmrg      <entry>3.5</entry>
318e9fcaa8aSmrg    </row>
319e9fcaa8aSmrg    <row>
320e9fcaa8aSmrg      <entry>_XimRegisterDispatcher</entry>
321e9fcaa8aSmrg      <entry>register_dispatcher</entry>
322e9fcaa8aSmrg      <entry>3.6</entry>
323e9fcaa8aSmrg    </row>
324e9fcaa8aSmrg    <row>
325e9fcaa8aSmrg      <entry>_XimCallDispatcher</entry>
326e9fcaa8aSmrg      <entry>call_dispatcher</entry>
327e9fcaa8aSmrg      <entry>3.7</entry>
328e9fcaa8aSmrg    </row>
329e9fcaa8aSmrg  </tbody>
330e9fcaa8aSmrg  </tgroup>
331e9fcaa8aSmrg</table>
332e9fcaa8aSmrg
333e9fcaa8aSmrg<para>
334e9fcaa8aSmrgThe Protocol layer calls the above functions using the Alternative
335e9fcaa8aSmrgEntry in the left column. The transport implementation defines
336e9fcaa8aSmrgXimProto member function in the right column. The Alternative Entry is
337e9fcaa8aSmrgprovided so as to make easier to implement the Protocol Layer.
338e9fcaa8aSmrg</para>
339e9fcaa8aSmrg
340e9fcaa8aSmrg<sect2 id="Opening_connection">
341e9fcaa8aSmrg<title>Opening connection</title>
342e9fcaa8aSmrg<para>
343e9fcaa8aSmrg<!-- .LP -->
344eb411b4bSmrgWhen <olink targetdoc='libX11' targetptr='XOpenIM'><function>XOpenIM</function></olink> is called, the following function is called to connect
345e9fcaa8aSmrgwith the IM Server.
346e9fcaa8aSmrg</para>
347e9fcaa8aSmrg
348e9fcaa8aSmrg<funcsynopsis>
349e9fcaa8aSmrg<funcprototype>
350e9fcaa8aSmrg  <funcdef>Bool <function>(*connect)</function></funcdef>
351e9fcaa8aSmrg  <paramdef>XIM<parameter> im</parameter></paramdef>
352e9fcaa8aSmrg</funcprototype>
353e9fcaa8aSmrg</funcsynopsis>
354e9fcaa8aSmrg
355e9fcaa8aSmrg<variablelist>
356e9fcaa8aSmrg  <varlistentry>
357e9fcaa8aSmrg    <term>
358e9fcaa8aSmrg      <emphasis remap='I'>im</emphasis>
359e9fcaa8aSmrg    </term>
360e9fcaa8aSmrg    <listitem>
361e9fcaa8aSmrg      <para>
362e9fcaa8aSmrgSpecifies XIM structure address.
363e9fcaa8aSmrg      </para>
364e9fcaa8aSmrg    </listitem>
365e9fcaa8aSmrg  </varlistentry>
366e9fcaa8aSmrg</variablelist>
367e9fcaa8aSmrg
368e9fcaa8aSmrg<para>
369e9fcaa8aSmrgThis function must establishes the connection to the IM Server. If the
370e9fcaa8aSmrgconnection is established successfully, this function returns True.
371e9fcaa8aSmrgThe Alternative Entry for this function is:
372e9fcaa8aSmrg</para>
373e9fcaa8aSmrg
374eb411b4bSmrg<funcsynopsis id='_XimConnect'>
375e9fcaa8aSmrg<funcprototype>
376e9fcaa8aSmrg  <funcdef>Bool <function> _XimConnect</function></funcdef>
377e9fcaa8aSmrg  <paramdef>XIM<parameter> im</parameter></paramdef>
378e9fcaa8aSmrg</funcprototype>
379e9fcaa8aSmrg</funcsynopsis>
380e9fcaa8aSmrg
381e9fcaa8aSmrg<variablelist>
382e9fcaa8aSmrg  <varlistentry>
383e9fcaa8aSmrg    <term>
384e9fcaa8aSmrg      <emphasis remap='I'>im</emphasis>
385e9fcaa8aSmrg    </term>
386e9fcaa8aSmrg    <listitem>
387e9fcaa8aSmrg      <para>
388e9fcaa8aSmrgSpecifies XIM structure address.
389e9fcaa8aSmrg      </para>
390e9fcaa8aSmrg    </listitem>
391e9fcaa8aSmrg  </varlistentry>
392e9fcaa8aSmrg</variablelist>
393e9fcaa8aSmrg</sect2>
394e9fcaa8aSmrg
395e9fcaa8aSmrg<sect2 id="Closing_connection">
396e9fcaa8aSmrg<title>Closing connection</title>
397e9fcaa8aSmrg<!-- .XS -->
398e9fcaa8aSmrg<!-- (SN Closing connection -->
399e9fcaa8aSmrg<!-- .XE -->
400e9fcaa8aSmrg<para>
401e9fcaa8aSmrg<!-- .LP -->
402eb411b4bSmrgWhen <olink targetdoc='libX11' targetptr='XCloseIM'><function>XCloseIM</function></olink> is called, the following function is called to
403e9fcaa8aSmrgdisconnect the connection with the IM Server. The Alternative Entry
404e9fcaa8aSmrgfor this function is:
405e9fcaa8aSmrg</para>
406e9fcaa8aSmrg
407e9fcaa8aSmrg<funcsynopsis>
408e9fcaa8aSmrg<funcprototype>
409e9fcaa8aSmrg  <funcdef>Bool <function> (*shutdown)</function></funcdef>
410e9fcaa8aSmrg  <paramdef>XIM<parameter> im</parameter></paramdef>
411e9fcaa8aSmrg</funcprototype>
412e9fcaa8aSmrg</funcsynopsis>
413e9fcaa8aSmrg
414e9fcaa8aSmrg<variablelist>
415e9fcaa8aSmrg  <varlistentry>
416e9fcaa8aSmrg    <term>
417e9fcaa8aSmrg      <emphasis remap='I'>im</emphasis>
418e9fcaa8aSmrg    </term>
419e9fcaa8aSmrg    <listitem>
420e9fcaa8aSmrg      <para>
421e9fcaa8aSmrgSpecifies XIM structure address.
422e9fcaa8aSmrg      </para>
423e9fcaa8aSmrg    </listitem>
424e9fcaa8aSmrg  </varlistentry>
425e9fcaa8aSmrg</variablelist>
426e9fcaa8aSmrg
427e9fcaa8aSmrg<para>
428e9fcaa8aSmrg<!-- .LP -->
429e9fcaa8aSmrgThis function must close connection with the IM Server. If the
430e9fcaa8aSmrgconnection is closed successfully, this function returns True. The
431e9fcaa8aSmrgAlternative Entry for this function is:
432e9fcaa8aSmrg</para>
433e9fcaa8aSmrg
434eb411b4bSmrg<funcsynopsis id='_XimShutdown'>
435e9fcaa8aSmrg<funcprototype>
436e9fcaa8aSmrg  <funcdef>Bool <function>_XimShutdown</function></funcdef>
437e9fcaa8aSmrg  <paramdef>XIM<parameter> im</parameter></paramdef>
438e9fcaa8aSmrg</funcprototype>
439e9fcaa8aSmrg</funcsynopsis>
440e9fcaa8aSmrg
441e9fcaa8aSmrg<variablelist>
442e9fcaa8aSmrg  <varlistentry>
443e9fcaa8aSmrg    <term>
444e9fcaa8aSmrg      <emphasis remap='I'>im</emphasis>
445e9fcaa8aSmrg    </term>
446e9fcaa8aSmrg    <listitem>
447e9fcaa8aSmrg      <para>
448e9fcaa8aSmrgSpecifies XIM structure address.
449e9fcaa8aSmrg      </para>
450e9fcaa8aSmrg    </listitem>
451e9fcaa8aSmrg  </varlistentry>
452e9fcaa8aSmrg</variablelist>
453e9fcaa8aSmrg
454e9fcaa8aSmrg</sect2>
455e9fcaa8aSmrg
456e9fcaa8aSmrg<sect2 id="Writing_data">
457e9fcaa8aSmrg<title>Writing data</title>
458e9fcaa8aSmrg<para>
459e9fcaa8aSmrgThe following function is called, when Xlib needs to write data to the
460e9fcaa8aSmrgIM Server.
461e9fcaa8aSmrg</para>
462e9fcaa8aSmrg
463eb411b4bSmrg<funcsynopsis id='_XimWrite'>
464e9fcaa8aSmrg<funcprototype>
465e9fcaa8aSmrg  <funcdef>Bool <function> _XimWrite</function></funcdef>
466e9fcaa8aSmrg  <paramdef>XIM<parameter> im</parameter></paramdef>
467e9fcaa8aSmrg  <paramdef>INT16<parameter> len</parameter></paramdef>
468e9fcaa8aSmrg  <paramdef>XPointer<parameter> data</parameter></paramdef>
469e9fcaa8aSmrg</funcprototype>
470e9fcaa8aSmrg</funcsynopsis>
471e9fcaa8aSmrg
472e9fcaa8aSmrg<variablelist>
473e9fcaa8aSmrg  <varlistentry>
474e9fcaa8aSmrg    <term>
475e9fcaa8aSmrg      <emphasis remap='I'>im</emphasis>
476e9fcaa8aSmrg    </term>
477e9fcaa8aSmrg    <listitem>
478e9fcaa8aSmrg      <para>
479e9fcaa8aSmrgSpecifies XIM structure address.
480e9fcaa8aSmrg      </para>
481e9fcaa8aSmrg    </listitem>
482e9fcaa8aSmrg  </varlistentry>
483e9fcaa8aSmrg  <varlistentry>
484e9fcaa8aSmrg    <term>
485e9fcaa8aSmrg      <emphasis remap='I'>len</emphasis>
486e9fcaa8aSmrg    </term>
487e9fcaa8aSmrg    <listitem>
488e9fcaa8aSmrg      <para>
489e9fcaa8aSmrgSpecifies the length of writing data.
490e9fcaa8aSmrg      </para>
491e9fcaa8aSmrg    </listitem>
492e9fcaa8aSmrg  </varlistentry>
493e9fcaa8aSmrg  <varlistentry>
494e9fcaa8aSmrg    <term>
495e9fcaa8aSmrg      <emphasis remap='I'>data</emphasis>
496e9fcaa8aSmrg    </term>
497e9fcaa8aSmrg    <listitem>
498e9fcaa8aSmrg      <para>
499e9fcaa8aSmrgSpecifies the writing data.
500e9fcaa8aSmrg    </para>
501e9fcaa8aSmrg  </listitem>
502e9fcaa8aSmrg  </varlistentry>
503e9fcaa8aSmrg</variablelist>
504e9fcaa8aSmrg
505e9fcaa8aSmrg<para>
506e9fcaa8aSmrgThis function writes the <emphasis remap='I'>data</emphasis> to the IM Server, regardless
507e9fcaa8aSmrgof the contents.  The number of bytes is passed to <emphasis remap='I'>len</emphasis>. The
508e9fcaa8aSmrgwriting data is passed to <emphasis remap='I'>data</emphasis>. If data is sent successfully,
509e9fcaa8aSmrgthe function returns True. Refer to "The Input Method Protocol" for
510e9fcaa8aSmrgthe contents of the writing data. The Alternative Entry for this
511e9fcaa8aSmrgfunction is:
512e9fcaa8aSmrg</para>
513e9fcaa8aSmrg
514e9fcaa8aSmrg<funcsynopsis>
515e9fcaa8aSmrg<funcprototype>
516e9fcaa8aSmrg  <funcdef>Bool <function>_XimWrite</function></funcdef>
517e9fcaa8aSmrg  <paramdef>XIM<parameter> im</parameter></paramdef>
518e9fcaa8aSmrg  <paramdef>INT16<parameter> len</parameter></paramdef>
519e9fcaa8aSmrg  <paramdef>XPointer<parameter> data</parameter></paramdef>
520e9fcaa8aSmrg</funcprototype>
521e9fcaa8aSmrg</funcsynopsis>
522e9fcaa8aSmrg
523e9fcaa8aSmrg<variablelist>
524e9fcaa8aSmrg  <varlistentry>
525e9fcaa8aSmrg    <term>
526e9fcaa8aSmrg      <emphasis remap='I'>im</emphasis>
527e9fcaa8aSmrg    </term>
528e9fcaa8aSmrg    <listitem>
529e9fcaa8aSmrg      <para>
530e9fcaa8aSmrgSpecifies XIM structure address.
531e9fcaa8aSmrg      </para>
532e9fcaa8aSmrg    </listitem>
533e9fcaa8aSmrg  </varlistentry>
534e9fcaa8aSmrg  <varlistentry>
535e9fcaa8aSmrg    <term>
536e9fcaa8aSmrg      <emphasis remap='I'>len</emphasis>
537e9fcaa8aSmrg    </term>
538e9fcaa8aSmrg    <listitem>
539e9fcaa8aSmrg      <para>
540e9fcaa8aSmrgSpecifies the length of writing data.
541e9fcaa8aSmrg      </para>
542e9fcaa8aSmrg    </listitem>
543e9fcaa8aSmrg  </varlistentry>
544e9fcaa8aSmrg  <varlistentry>
545e9fcaa8aSmrg    <term>
546e9fcaa8aSmrg      <emphasis remap='I'>data</emphasis>
547e9fcaa8aSmrg    </term>
548e9fcaa8aSmrg    <listitem>
549e9fcaa8aSmrg      <para>
550e9fcaa8aSmrgSpecifies the writing data.
551e9fcaa8aSmrg    </para>
552e9fcaa8aSmrg  </listitem>
553e9fcaa8aSmrg  </varlistentry>
554e9fcaa8aSmrg</variablelist>
555e9fcaa8aSmrg
556e9fcaa8aSmrg</sect2>
557e9fcaa8aSmrg<sect2 id="Reading_data">
558e9fcaa8aSmrg<title>Reading data</title>
559e9fcaa8aSmrg<para>
560e9fcaa8aSmrgThe following function is called when Xlib waits for response from IM
561e9fcaa8aSmrgserver synchronously.
562e9fcaa8aSmrg</para>
563e9fcaa8aSmrg
564eb411b4bSmrg<funcsynopsis id='_XimRead'>
565e9fcaa8aSmrg<funcprototype>
566e9fcaa8aSmrg  <funcdef>Bool <function> _XimRead</function></funcdef>
567e9fcaa8aSmrg  <paramdef>XIM<parameter> im</parameter></paramdef>
568e9fcaa8aSmrg  <paramdef>XPointer<parameter> read_buf</parameter></paramdef>
569e9fcaa8aSmrg  <paramdef>int<parameter> buf_len</parameter></paramdef>
570e9fcaa8aSmrg  <paramdef>int<parameter> *ret_len</parameter></paramdef>
571e9fcaa8aSmrg</funcprototype>
572e9fcaa8aSmrg</funcsynopsis>
573e9fcaa8aSmrg
574e9fcaa8aSmrg<variablelist>
575e9fcaa8aSmrg  <varlistentry>
576e9fcaa8aSmrg    <term>
577e9fcaa8aSmrg      <emphasis remap='I'>im</emphasis>
578e9fcaa8aSmrg    </term>
579e9fcaa8aSmrg    <listitem>
580e9fcaa8aSmrg      <para>
581e9fcaa8aSmrgSpecifies XIM structure address.
582e9fcaa8aSmrg      </para>
583e9fcaa8aSmrg    </listitem>
584e9fcaa8aSmrg  </varlistentry>
585e9fcaa8aSmrg  <varlistentry>
586e9fcaa8aSmrg    <term>
587e9fcaa8aSmrg      <emphasis remap='I'>read_buf</emphasis>
588e9fcaa8aSmrg    </term>
589e9fcaa8aSmrg    <listitem>
590e9fcaa8aSmrg      <para>
591e9fcaa8aSmrgSpecifies the buffer to store data.
592e9fcaa8aSmrg      </para>
593e9fcaa8aSmrg    </listitem>
594e9fcaa8aSmrg  </varlistentry>
595e9fcaa8aSmrg  <varlistentry>
596e9fcaa8aSmrg    <term>
597e9fcaa8aSmrg      <emphasis remap='I'>buf_len</emphasis>
598e9fcaa8aSmrg    </term>
599e9fcaa8aSmrg    <listitem>
600e9fcaa8aSmrg      <para>
601e9fcaa8aSmrgSpecifies the size of the <emphasis remap='I'>buffer</emphasis>
602e9fcaa8aSmrg      </para>
603e9fcaa8aSmrg    </listitem>
604e9fcaa8aSmrg  </varlistentry>
605e9fcaa8aSmrg  <varlistentry>
606e9fcaa8aSmrg    <term>
607e9fcaa8aSmrg      <emphasis remap='I'>ret_len</emphasis>
608e9fcaa8aSmrg    </term>
609e9fcaa8aSmrg    <listitem>
610e9fcaa8aSmrg      <para>
611e9fcaa8aSmrgSpecifies the length of stored data.
612e9fcaa8aSmrg      </para>
613e9fcaa8aSmrg    </listitem>
614e9fcaa8aSmrg  </varlistentry>
615e9fcaa8aSmrg</variablelist>
616e9fcaa8aSmrg
617e9fcaa8aSmrg<para>
618e9fcaa8aSmrgThis function stores the read data in <emphasis remap='I'>read_buf</emphasis>, which size is
619e9fcaa8aSmrgspecified as <emphasis remap='I'>buf_len</emphasis>. The size of data is set to <emphasis remap='I'>ret_len</emphasis>.
620e9fcaa8aSmrgThis function return True, if the data is read normally or reading
621e9fcaa8aSmrgdata is completed.
622e9fcaa8aSmrg</para>
623e9fcaa8aSmrg<para>
624e9fcaa8aSmrgThe Alternative Entry for this function is:
625e9fcaa8aSmrg</para>
626e9fcaa8aSmrg
627e9fcaa8aSmrg<funcsynopsis>
628e9fcaa8aSmrg<funcprototype>
629e9fcaa8aSmrg  <funcdef>Bool <function> _XimRead</function></funcdef>
630e9fcaa8aSmrg  <paramdef>XIM<parameter> im</parameter></paramdef>
631e9fcaa8aSmrg  <paramdef>INT16<parameter> *ret_len</parameter></paramdef>
632e9fcaa8aSmrg  <paramdef>XPointer<parameter> buf</parameter></paramdef>
633e9fcaa8aSmrg  <paramdef>int<parameter> buf_len</parameter></paramdef>
634e9fcaa8aSmrg  <paramdef>Bool<parameter> (*predicate)()</parameter></paramdef>
635e9fcaa8aSmrg  <paramdef>XPointer<parameter> predicate_arg</parameter></paramdef>
636e9fcaa8aSmrg</funcprototype>
637e9fcaa8aSmrg</funcsynopsis>
638e9fcaa8aSmrg
639e9fcaa8aSmrg<variablelist>
640e9fcaa8aSmrg  <varlistentry>
641e9fcaa8aSmrg    <term>
642e9fcaa8aSmrg      <emphasis remap='I'>im</emphasis>
643e9fcaa8aSmrg    </term>
644e9fcaa8aSmrg    <listitem>
645e9fcaa8aSmrg      <para>
646e9fcaa8aSmrgSpecifies XIM structure address.
647e9fcaa8aSmrg      </para>
648e9fcaa8aSmrg    </listitem>
649e9fcaa8aSmrg  </varlistentry>
650e9fcaa8aSmrg  <varlistentry>
651e9fcaa8aSmrg    <term>
652e9fcaa8aSmrg      <emphasis remap='I'>ret_len</emphasis>
653e9fcaa8aSmrg    </term>
654e9fcaa8aSmrg    <listitem>
655e9fcaa8aSmrg      <para>
656e9fcaa8aSmrgSpecifies the size of the <emphasis remap='I'>data</emphasis> buffer.
657e9fcaa8aSmrg      </para>
658e9fcaa8aSmrg    </listitem>
659e9fcaa8aSmrg  </varlistentry>
660e9fcaa8aSmrg  <varlistentry>
661e9fcaa8aSmrg    <term>
662e9fcaa8aSmrg      <emphasis remap='I'>buf</emphasis>
663e9fcaa8aSmrg    </term>
664e9fcaa8aSmrg    <listitem>
665e9fcaa8aSmrg      <para>
666e9fcaa8aSmrgSpecifies the buffer to store data.
667e9fcaa8aSmrg      </para>
668e9fcaa8aSmrg    </listitem>
669e9fcaa8aSmrg  </varlistentry>
670e9fcaa8aSmrg  <varlistentry>
671e9fcaa8aSmrg    <term>
672e9fcaa8aSmrg      <emphasis remap='I'>buf_len</emphasis>
673e9fcaa8aSmrg    </term>
674e9fcaa8aSmrg    <listitem>
675e9fcaa8aSmrg      <para>
676e9fcaa8aSmrgSpecifies the length of <emphasis remap='I'>buffer</emphasis>.
677e9fcaa8aSmrg      </para>
678e9fcaa8aSmrg    </listitem>
679e9fcaa8aSmrg  </varlistentry>
680e9fcaa8aSmrg  <varlistentry>
681e9fcaa8aSmrg    <term>
682e9fcaa8aSmrg      <emphasis remap='I'>predicate</emphasis>
683e9fcaa8aSmrg    </term>
684e9fcaa8aSmrg    <listitem>
685e9fcaa8aSmrg      <para>
686e9fcaa8aSmrgSpecifies the predicate for the XIM data.
687e9fcaa8aSmrg      </para>
688e9fcaa8aSmrg    </listitem>
689e9fcaa8aSmrg  </varlistentry>
690e9fcaa8aSmrg  <varlistentry>
691e9fcaa8aSmrg    <term>
692e9fcaa8aSmrg      <emphasis remap='I'>predicate_arg</emphasis>
693e9fcaa8aSmrg    </term>
694e9fcaa8aSmrg    <listitem>
695e9fcaa8aSmrg      <para>
696e9fcaa8aSmrgSpecifies the predicate specific data.
697e9fcaa8aSmrg<!-- .sp 6p -->
698e9fcaa8aSmrg    </para>
699e9fcaa8aSmrg  </listitem>
700e9fcaa8aSmrg  </varlistentry>
701e9fcaa8aSmrg</variablelist>
702e9fcaa8aSmrg
703e9fcaa8aSmrg<para>
704e9fcaa8aSmrgThe predicate procedure indicates whether the <emphasis remap='I'>data</emphasis> is for the
705e9fcaa8aSmrgXIM or not. <emphasis remap='I'>len</emphasis>
706e9fcaa8aSmrgThis function stores the read data in <emphasis remap='I'>buf</emphasis>, which size
707e9fcaa8aSmrgis specified as <emphasis remap='I'>buf_len</emphasis>. The size of data is set to
708e9fcaa8aSmrg<emphasis remap='I'>ret_len</emphasis>.  If <emphasis remap='I'>preedicate()</emphasis>
709e9fcaa8aSmrgreturns True, this function returns True.  If not, it calls the registered callback function.
710e9fcaa8aSmrg</para>
711e9fcaa8aSmrg
712e9fcaa8aSmrg<para>
713e9fcaa8aSmrgThe procedure and its arguments are:
714e9fcaa8aSmrg</para>
715e9fcaa8aSmrg
716e9fcaa8aSmrg
717e9fcaa8aSmrg<funcsynopsis>
718e9fcaa8aSmrg<funcprototype>
719e9fcaa8aSmrg  <funcdef>void <function>(*predicate)</function></funcdef>
720e9fcaa8aSmrg  <paramdef>XIM<parameter> im</parameter></paramdef>
721e9fcaa8aSmrg  <paramdef>INT16<parameter> len</parameter></paramdef>
722e9fcaa8aSmrg  <paramdef>XPointer<parameter> data</parameter></paramdef>
723e9fcaa8aSmrg  <paramdef>XPointer<parameter> predicate_arg</parameter></paramdef>
724e9fcaa8aSmrg</funcprototype>
725e9fcaa8aSmrg</funcsynopsis>
726e9fcaa8aSmrg
727e9fcaa8aSmrg<variablelist>
728e9fcaa8aSmrg  <varlistentry>
729e9fcaa8aSmrg    <term>
730e9fcaa8aSmrg      <emphasis remap='I'>im</emphasis>
731e9fcaa8aSmrg    </term>
732e9fcaa8aSmrg    <listitem>
733e9fcaa8aSmrg      <para>
734e9fcaa8aSmrgSpecifies XIM structure address.
735e9fcaa8aSmrg      </para>
736e9fcaa8aSmrg    </listitem>
737e9fcaa8aSmrg  </varlistentry>
738e9fcaa8aSmrg  <varlistentry>
739e9fcaa8aSmrg    <term>
740e9fcaa8aSmrg      <emphasis remap='I'>len</emphasis>
741e9fcaa8aSmrg    </term>
742e9fcaa8aSmrg    <listitem>
743e9fcaa8aSmrg      <para>
744e9fcaa8aSmrgSpecifies the size of the <emphasis remap='I'>data</emphasis> buffer.
745e9fcaa8aSmrg      </para>
746e9fcaa8aSmrg    </listitem>
747e9fcaa8aSmrg  </varlistentry>
748e9fcaa8aSmrg  <varlistentry>
749e9fcaa8aSmrg    <term>
750e9fcaa8aSmrg      <emphasis remap='I'>data</emphasis>
751e9fcaa8aSmrg    </term>
752e9fcaa8aSmrg    <listitem>
753e9fcaa8aSmrg      <para>
754e9fcaa8aSmrgSpecifies the buffer to store data.
755e9fcaa8aSmrg      </para>
756e9fcaa8aSmrg    </listitem>
757e9fcaa8aSmrg  </varlistentry>
758e9fcaa8aSmrg  <varlistentry>
759e9fcaa8aSmrg    <term>
760e9fcaa8aSmrg      <emphasis remap='I'>predicate_arg</emphasis>
761e9fcaa8aSmrg    </term>
762e9fcaa8aSmrg    <listitem>
763e9fcaa8aSmrg      <para>
764e9fcaa8aSmrgSpecifies the predicate specific data.
765e9fcaa8aSmrg      </para>
766e9fcaa8aSmrg    </listitem>
767e9fcaa8aSmrg  </varlistentry>
768e9fcaa8aSmrg</variablelist>
769e9fcaa8aSmrg
770e9fcaa8aSmrg</sect2>
771e9fcaa8aSmrg<sect2 id="Flushing_buffer">
772e9fcaa8aSmrg<title>Flushing buffer</title>
773e9fcaa8aSmrg<para>
774e9fcaa8aSmrgThe following function is called when Xlib needs to flush the data.
775e9fcaa8aSmrg</para>
776e9fcaa8aSmrg
777e9fcaa8aSmrg<funcsynopsis>
778e9fcaa8aSmrg<funcprototype>
779e9fcaa8aSmrg  <funcdef>void <function>(*flush)</function></funcdef>
780e9fcaa8aSmrg  <paramdef>XIM<parameter> im</parameter></paramdef>
781e9fcaa8aSmrg</funcprototype>
782e9fcaa8aSmrg</funcsynopsis>
783e9fcaa8aSmrg
784e9fcaa8aSmrg<variablelist>
785e9fcaa8aSmrg  <varlistentry>
786e9fcaa8aSmrg    <term>
787e9fcaa8aSmrg      <emphasis remap='I'>im</emphasis>
788e9fcaa8aSmrg    </term>
789e9fcaa8aSmrg    <listitem>
790e9fcaa8aSmrg      <para>
791e9fcaa8aSmrgSpecifies XIM structure address.
792e9fcaa8aSmrg      </para>
793e9fcaa8aSmrg    </listitem>
794e9fcaa8aSmrg  </varlistentry>
795e9fcaa8aSmrg</variablelist>
796e9fcaa8aSmrg
797e9fcaa8aSmrg<para>
798e9fcaa8aSmrgThis function must flush the data stored in internal buffer on the
799e9fcaa8aSmrgtransport layer. If data transfer is completed, the function returns
800e9fcaa8aSmrgTrue.  The Alternative Entry for this function is:
801e9fcaa8aSmrg</para>
802e9fcaa8aSmrg
803eb411b4bSmrg<funcsynopsis id='_XimFlush'>
804e9fcaa8aSmrg<funcprototype>
805e9fcaa8aSmrg  <funcdef>void <function> _XimFlush</function></funcdef>
806e9fcaa8aSmrg  <paramdef>XIM<parameter> im</parameter></paramdef>
807e9fcaa8aSmrg</funcprototype>
808e9fcaa8aSmrg</funcsynopsis>
809e9fcaa8aSmrg
810e9fcaa8aSmrg<variablelist>
811e9fcaa8aSmrg  <varlistentry>
812e9fcaa8aSmrg    <term>
813e9fcaa8aSmrg      <emphasis remap='I'>im</emphasis>
814e9fcaa8aSmrg    </term>
815e9fcaa8aSmrg    <listitem>
816e9fcaa8aSmrg      <para>
817e9fcaa8aSmrgSpecifies XIM structure address.
818e9fcaa8aSmrg      </para>
819e9fcaa8aSmrg    </listitem>
820e9fcaa8aSmrg  </varlistentry>
821e9fcaa8aSmrg</variablelist>
822e9fcaa8aSmrg
823e9fcaa8aSmrg</sect2>
824e9fcaa8aSmrg<sect2 id="Registering_asynchronous_data_handler">
825e9fcaa8aSmrg<title>Registering asynchronous data handler</title>
826e9fcaa8aSmrg<para>
827e9fcaa8aSmrgXlib needs to handle asynchronous response from IM Server. This is
828e9fcaa8aSmrgbecause some of the XIM data occur asynchronously to X events.
829e9fcaa8aSmrg</para>
830e9fcaa8aSmrg
831e9fcaa8aSmrg<para>
832e9fcaa8aSmrgThose data will be handled in the <emphasis remap='I'>Filter</emphasis>,
833e9fcaa8aSmrgand the <emphasis remap='I'>Filter</emphasis>
834e9fcaa8aSmrgwill call asynchronous data handler in the protocol layer. Then it
835e9fcaa8aSmrgcalls dispatchers in the transport layer. The dispatchers are
836e9fcaa8aSmrgimplemented by the protocol layer. This function must store the
837e9fcaa8aSmrginformation and prepare for later call of the dispatchers using
838eb411b4bSmrg<xref linkend='_XimCallDispatcher' xrefstyle='select: title'/>.
839e9fcaa8aSmrg</para>
840e9fcaa8aSmrg
841e9fcaa8aSmrg<para>
842e9fcaa8aSmrgWhen multiple dispatchers are registered, they will be called
843e9fcaa8aSmrgsequentially in order of registration, on arrival of asynchronous
844e9fcaa8aSmrgdata. The register_dispatcher is declared as following:
845e9fcaa8aSmrg</para>
846e9fcaa8aSmrg
847e9fcaa8aSmrg<funcsynopsis>
848e9fcaa8aSmrg<funcprototype>
849e9fcaa8aSmrg  <funcdef>Bool <function>(*register_dispatcher)</function></funcdef>
850e9fcaa8aSmrg  <paramdef>XIM<parameter> im</parameter></paramdef>
851e9fcaa8aSmrg  <paramdef>Bool<parameter> (*dispatcher)()</parameter></paramdef>
852e9fcaa8aSmrg  <paramdef>XPointer<parameter> call_data</parameter></paramdef>
853e9fcaa8aSmrg</funcprototype>
854e9fcaa8aSmrg</funcsynopsis>
855e9fcaa8aSmrg
856e9fcaa8aSmrg<variablelist>
857e9fcaa8aSmrg  <varlistentry>
858e9fcaa8aSmrg    <term>
859e9fcaa8aSmrg      <emphasis remap='I'>im</emphasis>
860e9fcaa8aSmrg    </term>
861e9fcaa8aSmrg    <listitem>
862e9fcaa8aSmrg      <para>
863e9fcaa8aSmrgSpecifies XIM structure address.
864e9fcaa8aSmrg      </para>
865e9fcaa8aSmrg    </listitem>
866e9fcaa8aSmrg  </varlistentry>
867e9fcaa8aSmrg  <varlistentry>
868e9fcaa8aSmrg    <term>
869e9fcaa8aSmrg      <emphasis remap='I'>dispatcher</emphasis>
870e9fcaa8aSmrg    </term>
871e9fcaa8aSmrg    <listitem>
872e9fcaa8aSmrg      <para>
873e9fcaa8aSmrgSpecifies the dispatcher function to register.
874e9fcaa8aSmrg      </para>
875e9fcaa8aSmrg    </listitem>
876e9fcaa8aSmrg  </varlistentry>
877e9fcaa8aSmrg  <varlistentry>
878e9fcaa8aSmrg    <term>
879e9fcaa8aSmrg      <emphasis remap='I'>call_data</emphasis>
880e9fcaa8aSmrg    </term>
881e9fcaa8aSmrg    <listitem>
882e9fcaa8aSmrg      <para>
883e9fcaa8aSmrgSpecifies a parameter for the <emphasis remap='I'>dispatcher</emphasis>.
884e9fcaa8aSmrg    </para>
885e9fcaa8aSmrg  </listitem>
886e9fcaa8aSmrg  </varlistentry>
887e9fcaa8aSmrg</variablelist>
888e9fcaa8aSmrg
889e9fcaa8aSmrg<para>
890e9fcaa8aSmrgThe dispatcher is a function of the following type:
891e9fcaa8aSmrg</para>
892e9fcaa8aSmrg
893e9fcaa8aSmrg<funcsynopsis>
894e9fcaa8aSmrg<funcprototype>
895e9fcaa8aSmrg  <funcdef>Bool <function>(*dispatcher)</function></funcdef>
896e9fcaa8aSmrg  <paramdef>XIM<parameter> im</parameter></paramdef>
897e9fcaa8aSmrg  <paramdef>INT16<parameter> len</parameter></paramdef>
898e9fcaa8aSmrg  <paramdef>XPointer<parameter> data</parameter></paramdef>
899e9fcaa8aSmrg  <paramdef>XPointer<parameter> call_data</parameter></paramdef>
900e9fcaa8aSmrg</funcprototype>
901e9fcaa8aSmrg</funcsynopsis>
902e9fcaa8aSmrg
903e9fcaa8aSmrg<variablelist>
904e9fcaa8aSmrg  <varlistentry>
905e9fcaa8aSmrg    <term>
906e9fcaa8aSmrg      <emphasis remap='I'>im</emphasis>
907e9fcaa8aSmrg    </term>
908e9fcaa8aSmrg    <listitem>
909e9fcaa8aSmrg      <para>
910e9fcaa8aSmrgSpecifies XIM structure address.
911e9fcaa8aSmrg      </para>
912e9fcaa8aSmrg    </listitem>
913e9fcaa8aSmrg  </varlistentry>
914e9fcaa8aSmrg  <varlistentry>
915e9fcaa8aSmrg    <term>
916e9fcaa8aSmrg      <emphasis remap='I'>len</emphasis>
917e9fcaa8aSmrg    </term>
918e9fcaa8aSmrg    <listitem>
919e9fcaa8aSmrg      <para>
920e9fcaa8aSmrgSpecifies the size of the <emphasis remap='I'>data</emphasis> buffer.
921e9fcaa8aSmrg      </para>
922e9fcaa8aSmrg    </listitem>
923e9fcaa8aSmrg  </varlistentry>
924e9fcaa8aSmrg  <varlistentry>
925e9fcaa8aSmrg    <term>
926e9fcaa8aSmrg      <emphasis remap='I'>data</emphasis>
927e9fcaa8aSmrg    </term>
928e9fcaa8aSmrg    <listitem>
929e9fcaa8aSmrg      <para>
930e9fcaa8aSmrgSpecifies the buffer to store data.
931e9fcaa8aSmrg      </para>
932e9fcaa8aSmrg    </listitem>
933e9fcaa8aSmrg  </varlistentry>
934e9fcaa8aSmrg  <varlistentry>
935e9fcaa8aSmrg    <term>
936e9fcaa8aSmrg      <emphasis remap='I'>call_data</emphasis>
937e9fcaa8aSmrg    </term>
938e9fcaa8aSmrg    <listitem>
939e9fcaa8aSmrg      <para>
940e9fcaa8aSmrgSpecifies a parameter passed to the register_dispatcher.
941e9fcaa8aSmrg      </para>
942e9fcaa8aSmrg    </listitem>
943e9fcaa8aSmrg  </varlistentry>
944e9fcaa8aSmrg</variablelist>
945e9fcaa8aSmrg
946e9fcaa8aSmrg<para>
947e9fcaa8aSmrgThe dispatcher is provided by the protocol layer. They are called once
948e9fcaa8aSmrgfor every asynchronous data, in order of registration. If the data is
949e9fcaa8aSmrgused, it must return True. otherwise, it must return False.
950e9fcaa8aSmrg</para>
951e9fcaa8aSmrg
952e9fcaa8aSmrg<para>
953e9fcaa8aSmrgIf the dispatcher function returns True, the Transport Layer assume
954e9fcaa8aSmrgthat the data has been processed by the upper layer.  The Alternative
955e9fcaa8aSmrgEntry for this function is:
956e9fcaa8aSmrg</para>
957e9fcaa8aSmrg
958eb411b4bSmrg<funcsynopsis id='_XimRegisterDispatcher'>
959e9fcaa8aSmrg<funcprototype>
960e9fcaa8aSmrg  <funcdef>Bool <function> _XimRegisterDispatcher</function></funcdef>
961e9fcaa8aSmrg  <paramdef>XIM<parameter> im</parameter></paramdef>
962e9fcaa8aSmrg  <paramdef>Bool<parameter> (*dispatcher)()</parameter></paramdef>
963e9fcaa8aSmrg  <paramdef>XPointer<parameter> call_data</parameter></paramdef>
964e9fcaa8aSmrg</funcprototype>
965e9fcaa8aSmrg</funcsynopsis>
966e9fcaa8aSmrg
967e9fcaa8aSmrg<variablelist>
968e9fcaa8aSmrg  <varlistentry>
969e9fcaa8aSmrg    <term>
970e9fcaa8aSmrg      <emphasis remap='I'>im</emphasis>
971e9fcaa8aSmrg    </term>
972e9fcaa8aSmrg    <listitem>
973e9fcaa8aSmrg      <para>
974e9fcaa8aSmrgSpecifies XIM structure address.
975e9fcaa8aSmrg      </para>
976e9fcaa8aSmrg    </listitem>
977e9fcaa8aSmrg  </varlistentry>
978e9fcaa8aSmrg  <varlistentry>
979e9fcaa8aSmrg    <term>
980e9fcaa8aSmrg      <emphasis remap='I'>dispatcher</emphasis>
981e9fcaa8aSmrg    </term>
982e9fcaa8aSmrg    <listitem>
983e9fcaa8aSmrg      <para>
984e9fcaa8aSmrgSpecifies the dispatcher function to register.
985e9fcaa8aSmrg      </para>
986e9fcaa8aSmrg    </listitem>
987e9fcaa8aSmrg  </varlistentry>
988e9fcaa8aSmrg  <varlistentry>
989e9fcaa8aSmrg    <term>
990e9fcaa8aSmrg      <emphasis remap='I'>call_data</emphasis>
991e9fcaa8aSmrg    </term>
992e9fcaa8aSmrg    <listitem>
993e9fcaa8aSmrg      <para>
994e9fcaa8aSmrgSpecifies a parameter for the <emphasis remap='I'>dispatcher</emphasis>.
995e9fcaa8aSmrg      </para>
996e9fcaa8aSmrg    </listitem>
997e9fcaa8aSmrg  </varlistentry>
998e9fcaa8aSmrg</variablelist>
999e9fcaa8aSmrg
1000e9fcaa8aSmrg</sect2>
1001e9fcaa8aSmrg<sect2 id="Calling_dispatcher">
1002e9fcaa8aSmrg<title>Calling dispatcher</title>
1003e9fcaa8aSmrg<para>
1004e9fcaa8aSmrgThe following function is used to call the registered dispatcher
1005e9fcaa8aSmrgfunction, when the asynchronous response from IM Server has arrived.
1006e9fcaa8aSmrg</para>
1007e9fcaa8aSmrg
1008e9fcaa8aSmrg<funcsynopsis>
1009e9fcaa8aSmrg<funcprototype>
1010e9fcaa8aSmrg  <funcdef>Bool <function>(*call_dispatcher)</function></funcdef>
1011e9fcaa8aSmrg  <paramdef>XIM<parameter> im</parameter></paramdef>
1012e9fcaa8aSmrg  <paramdef>INT16<parameter> len</parameter></paramdef>
1013e9fcaa8aSmrg  <paramdef>XPointer<parameter> data</parameter></paramdef>
1014e9fcaa8aSmrg</funcprototype>
1015e9fcaa8aSmrg</funcsynopsis>
1016e9fcaa8aSmrg
1017e9fcaa8aSmrg<variablelist>
1018e9fcaa8aSmrg  <varlistentry>
1019e9fcaa8aSmrg    <term>
1020e9fcaa8aSmrg      <emphasis remap='I'>im</emphasis>
1021e9fcaa8aSmrg    </term>
1022e9fcaa8aSmrg    <listitem>
1023e9fcaa8aSmrg      <para>
1024e9fcaa8aSmrgSpecifies XIM structure address.
1025e9fcaa8aSmrg      </para>
1026e9fcaa8aSmrg    </listitem>
1027e9fcaa8aSmrg  </varlistentry>
1028e9fcaa8aSmrg  <varlistentry>
1029e9fcaa8aSmrg    <term>
1030e9fcaa8aSmrg      <emphasis remap='I'>len</emphasis>
1031e9fcaa8aSmrg    </term>
1032e9fcaa8aSmrg    <listitem>
1033e9fcaa8aSmrg      <para>
1034e9fcaa8aSmrgSpecifies the size of <emphasis remap='I'>data</emphasis> buffer.
1035e9fcaa8aSmrg      </para>
1036e9fcaa8aSmrg    </listitem>
1037e9fcaa8aSmrg  </varlistentry>
1038e9fcaa8aSmrg  <varlistentry>
1039e9fcaa8aSmrg    <term>
1040e9fcaa8aSmrg      <emphasis remap='I'>data</emphasis>
1041e9fcaa8aSmrg    </term>
1042e9fcaa8aSmrg    <listitem>
1043e9fcaa8aSmrg      <para>
1044e9fcaa8aSmrgSpecifies the buffer to store data.
1045e9fcaa8aSmrg      </para>
1046e9fcaa8aSmrg    </listitem>
1047e9fcaa8aSmrg  </varlistentry>
1048e9fcaa8aSmrg</variablelist>
1049e9fcaa8aSmrg
1050e9fcaa8aSmrg<para>
1051e9fcaa8aSmrgThe call_dispatcher must call the dispatcher function, in order of
1052e9fcaa8aSmrgtheir registration. <emphasis remap='I'>len</emphasis> and <emphasis remap='I'>data</emphasis> are the data passed to
1053e9fcaa8aSmrgregister_dispatcher.
1054e9fcaa8aSmrg</para>
1055e9fcaa8aSmrg
1056e9fcaa8aSmrg<para>
1057e9fcaa8aSmrgThe return values are checked at each invocation, and if it finds
1058e9fcaa8aSmrgTrue, it immediately return with true for its return value.
1059e9fcaa8aSmrg</para>
1060e9fcaa8aSmrg
1061e9fcaa8aSmrg<para>
1062e9fcaa8aSmrgIt is depend on the upper layer whether the read data is XIM
1063e9fcaa8aSmrgProtocol packet unit or not.
1064e9fcaa8aSmrgThe Alternative Entry for this function is:
1065e9fcaa8aSmrg</para>
1066e9fcaa8aSmrg
1067eb411b4bSmrg<funcsynopsis id='_XimCallDispatcher'>
1068e9fcaa8aSmrg<funcprototype>
1069e9fcaa8aSmrg  <funcdef>Bool <function> _XimCallDispatcher</function></funcdef>
1070e9fcaa8aSmrg  <paramdef>XIM<parameter> im</parameter></paramdef>
1071e9fcaa8aSmrg  <paramdef>INT16<parameter> len</parameter></paramdef>
1072e9fcaa8aSmrg  <paramdef>XPointer<parameter> call_data</parameter></paramdef>
1073e9fcaa8aSmrg</funcprototype>
1074e9fcaa8aSmrg</funcsynopsis>
1075e9fcaa8aSmrg
1076e9fcaa8aSmrg</sect2>
1077e9fcaa8aSmrg</sect1>
1078e9fcaa8aSmrg<sect1 id="Sample_implementations_for_the_Transport_Layer">
1079e9fcaa8aSmrg<title>Sample implementations for the Transport Layer</title>
1080e9fcaa8aSmrg<para>
1081e9fcaa8aSmrgSample implementations for the transporter using the X connection is
1082e9fcaa8aSmrgdescribed here.
1083e9fcaa8aSmrg</para>
1084e9fcaa8aSmrg
1085e9fcaa8aSmrg<sect2 id="X_Transport">
1086e9fcaa8aSmrg<title>X Transport</title>
1087e9fcaa8aSmrg<para>
1088e9fcaa8aSmrgAt the beginning of the X Transport connection for the XIM transport
1089e9fcaa8aSmrgmechanism, two different windows must be created either in an Xlib XIM
1090e9fcaa8aSmrgor in an IM Server, with which the Xlib and the IM Server exchange the
1091e9fcaa8aSmrgXIM transports by using the ClientMessage events and Window Properties.
1092e9fcaa8aSmrgIn the following, the window created by the Xlib is referred as the
1093e9fcaa8aSmrg"client communication window", and on the other hand, the window created
1094e9fcaa8aSmrgby the IM Server is referred as the "IMS communication window".
1095e9fcaa8aSmrg</para>
1096e9fcaa8aSmrg
1097e9fcaa8aSmrg<sect3 id="Connection">
1098e9fcaa8aSmrg<title>Connection</title>
1099e9fcaa8aSmrg<para>
1100e9fcaa8aSmrgIn order to establish a connection, a communication window is created.
1101e9fcaa8aSmrgA ClientMessage in the following event's format is sent to the owner
1102e9fcaa8aSmrgwindow of XIM_SERVER selection, which the IM Server has created.
1103e9fcaa8aSmrg</para>
1104e9fcaa8aSmrg
1105e9fcaa8aSmrg<para>
1106e9fcaa8aSmrg<!-- .LP -->
1107e9fcaa8aSmrgRefer to "The Input Method Protocol" for the XIM_SERVER atom.
1108e9fcaa8aSmrg</para>
1109e9fcaa8aSmrg
1110eb411b4bSmrg<table frame="topbot" id="transport_layer_functions">
1111eb411b4bSmrg  <?dbfo keep-together="always" ?>
1112e9fcaa8aSmrg  <title>The ClientMessage sent to the IMS window.</title>
1113eb411b4bSmrg  <tgroup cols="3" align='left' colsep='0' rowsep='0'>
1114eb411b4bSmrg  <colspec colname="col1" colwidth='1.0*'/>
1115eb411b4bSmrg  <colspec colname="col2" colwidth='1.0*' colsep='1'/>
1116eb411b4bSmrg  <colspec colname="col3" colwidth="3.5*"/>
1117eb411b4bSmrg  <spanspec namest="col1" nameend="col2" spanname="span-horiz"/>
1118e9fcaa8aSmrg  <thead>
1119eb411b4bSmrg    <row rowsep='1'>
1120eb411b4bSmrg      <entry spanname="span-horiz" colsep='1'>Structure Member</entry>
1121eb411b4bSmrg      <entry>Contents</entry>
1122e9fcaa8aSmrg    </row>
1123e9fcaa8aSmrg  </thead>
1124e9fcaa8aSmrg  <tbody>
1125eb411b4bSmrg    <row>
1126e9fcaa8aSmrg      <entry>int</entry>
1127e9fcaa8aSmrg      <entry>type</entry>
1128e9fcaa8aSmrg      <entry>ClientMessage</entry>
1129e9fcaa8aSmrg    </row>
1130eb411b4bSmrg    <row>
1131e9fcaa8aSmrg      <entry>u_long</entry>
1132e9fcaa8aSmrg      <entry>serial</entry>
1133e9fcaa8aSmrg      <entry>Set by the X Window System</entry>
1134e9fcaa8aSmrg    </row>
1135eb411b4bSmrg    <row>
1136e9fcaa8aSmrg      <entry>Bool</entry>
1137e9fcaa8aSmrg      <entry>send_event</entry>
1138e9fcaa8aSmrg      <entry>Set by the X Window System</entry>
1139e9fcaa8aSmrg    </row>
1140eb411b4bSmrg    <row>
1141e9fcaa8aSmrg      <entry>Display</entry>
1142e9fcaa8aSmrg      <entry>*display</entry>
1143e9fcaa8aSmrg      <entry>The display to which connects</entry>
1144e9fcaa8aSmrg    </row>
1145eb411b4bSmrg    <row>
1146e9fcaa8aSmrg      <entry>Window</entry>
1147e9fcaa8aSmrg      <entry>window</entry>
1148e9fcaa8aSmrg      <entry>IMS Window ID</entry>
1149e9fcaa8aSmrg    </row>
1150eb411b4bSmrg    <row>
1151e9fcaa8aSmrg      <entry>Atom</entry>
1152e9fcaa8aSmrg      <entry>message_type</entry>
1153e9fcaa8aSmrg      <entry>XInternAtom(display, "_XIM_CONNECT", false)</entry>
1154e9fcaa8aSmrg    </row>
1155eb411b4bSmrg    <row>
1156e9fcaa8aSmrg      <entry>int</entry>
1157e9fcaa8aSmrg      <entry>format</entry>
1158e9fcaa8aSmrg      <entry>32</entry>
1159e9fcaa8aSmrg    </row>
1160eb411b4bSmrg    <row>
1161e9fcaa8aSmrg      <entry>long</entry>
1162e9fcaa8aSmrg      <entry>data.1[0]</entry>
1163e9fcaa8aSmrg      <entry>client communication window ID</entry>
1164e9fcaa8aSmrg    </row>
1165eb411b4bSmrg    <row>
1166e9fcaa8aSmrg      <entry>long</entry>
1167e9fcaa8aSmrg      <entry>data.1[1]</entry>
1168e9fcaa8aSmrg      <entry>client-major-transport-version(*1)</entry>
1169e9fcaa8aSmrg    </row>
1170eb411b4bSmrg    <row>
1171e9fcaa8aSmrg      <entry>long</entry>
1172e9fcaa8aSmrg      <entry>data.1[2]</entry>
1173e9fcaa8aSmrg      <entry>client-major-transport-version(*1)</entry>
1174e9fcaa8aSmrg    </row>
1175e9fcaa8aSmrg  </tbody>
1176e9fcaa8aSmrg  </tgroup>
1177e9fcaa8aSmrg</table>
1178e9fcaa8aSmrg
1179e9fcaa8aSmrg<para>
1180e9fcaa8aSmrgIn order to establish the connection (to notify the IM Server communication
1181e9fcaa8aSmrgwindow), the IM Server sends a ClientMessage in the following event's
1182e9fcaa8aSmrgformat to the client communication window.
1183e9fcaa8aSmrg</para>
1184e9fcaa8aSmrg
1185eb411b4bSmrg<table frame="topbot" id="clientmessage_sent_by_im_server">
1186eb411b4bSmrg  <?dbfo keep-together="always" ?>
1187e9fcaa8aSmrg  <title>The ClientMessage sent by IM Server.</title>
1188eb411b4bSmrg  <tgroup cols="3" colsep='0' rowsep='0'>
1189eb411b4bSmrg  <colspec colname="col1" colwidth='1.0*'/>
1190eb411b4bSmrg  <colspec colname="col2" colwidth='1.0*' colsep="1"/>
1191eb411b4bSmrg  <colspec colname="col3" colwidth="3.5*"/>
1192eb411b4bSmrg  <spanspec namest="col1" nameend="col2" spanname="span-horiz"/>
1193e9fcaa8aSmrg  <thead>
1194eb411b4bSmrg    <row rowsep='1'>
1195eb411b4bSmrg      <entry spanname="span-horiz" colsep='1'>Structure Member</entry>
1196eb411b4bSmrg      <entry>Contents</entry>
1197e9fcaa8aSmrg    </row>
1198e9fcaa8aSmrg  </thead>
1199e9fcaa8aSmrg  <tbody>
1200eb411b4bSmrg    <row>
1201e9fcaa8aSmrg      <entry>int</entry>
1202e9fcaa8aSmrg      <entry>type</entry>
1203e9fcaa8aSmrg      <entry>ClientMessage</entry>
1204e9fcaa8aSmrg    </row>
1205eb411b4bSmrg    <row>
1206e9fcaa8aSmrg      <entry>u_long</entry>
1207e9fcaa8aSmrg      <entry>serial</entry>
1208e9fcaa8aSmrg      <entry>Set by the X Window System</entry>
1209e9fcaa8aSmrg    </row>
1210eb411b4bSmrg    <row>
1211e9fcaa8aSmrg      <entry>Bool</entry>
1212e9fcaa8aSmrg      <entry>send_event</entry>
1213e9fcaa8aSmrg      <entry>Set by the X Window System</entry>
1214e9fcaa8aSmrg    </row>
1215eb411b4bSmrg    <row>
1216e9fcaa8aSmrg      <entry>Display</entry>
1217e9fcaa8aSmrg      <entry>*display</entry>
1218e9fcaa8aSmrg      <entry>The display to which connects</entry>
1219e9fcaa8aSmrg    </row>
1220eb411b4bSmrg    <row>
1221e9fcaa8aSmrg      <entry>Window</entry>
1222e9fcaa8aSmrg      <entry>window</entry>
1223e9fcaa8aSmrg      <entry>IMS Window ID</entry>
1224e9fcaa8aSmrg    </row>
1225eb411b4bSmrg    <row>
1226e9fcaa8aSmrg      <entry>Atom</entry>
1227e9fcaa8aSmrg      <entry>message_type</entry>
1228e9fcaa8aSmrg      <entry>XInternAtom(display, "_XIM_CONNECT", false)</entry>
1229e9fcaa8aSmrg    </row>
1230eb411b4bSmrg    <row>
1231e9fcaa8aSmrg      <entry>int</entry>
1232e9fcaa8aSmrg      <entry>format</entry>
1233e9fcaa8aSmrg      <entry>32</entry>
1234e9fcaa8aSmrg    </row>
1235eb411b4bSmrg    <row>
1236e9fcaa8aSmrg      <entry>long</entry>
1237e9fcaa8aSmrg      <entry>data.1[0]</entry>
1238e9fcaa8aSmrg      <entry>client communication window ID</entry>
1239e9fcaa8aSmrg    </row>
1240eb411b4bSmrg    <row>
1241e9fcaa8aSmrg      <entry>long</entry>
1242e9fcaa8aSmrg      <entry>data.1[1]</entry>
1243e9fcaa8aSmrg      <entry>client-major-transport-version(*1)</entry>
1244e9fcaa8aSmrg    </row>
1245eb411b4bSmrg    <row>
1246e9fcaa8aSmrg      <entry>long</entry>
1247e9fcaa8aSmrg      <entry>data.1[2]</entry>
1248e9fcaa8aSmrg      <entry>client-major-transport-version(*1)</entry>
1249e9fcaa8aSmrg    </row>
1250eb411b4bSmrg    <row>
1251e9fcaa8aSmrg      <entry>long</entry>
1252e9fcaa8aSmrg      <entry>data.1[3]</entry>
1253e9fcaa8aSmrg      <entry>dividing size between ClientMessage and Property(*2)</entry>
1254e9fcaa8aSmrg    </row>
1255e9fcaa8aSmrg  </tbody>
1256e9fcaa8aSmrg  </tgroup>
1257e9fcaa8aSmrg</table>
1258e9fcaa8aSmrg
1259e9fcaa8aSmrg<para>
1260e9fcaa8aSmrg(*1) major/minor-transport-version
1261e9fcaa8aSmrg</para>
1262e9fcaa8aSmrg
1263e9fcaa8aSmrg<para>
1264e9fcaa8aSmrgThe read/write method is decided by the combination of
1265e9fcaa8aSmrgmajor/minor-transport-version, as follows:
1266e9fcaa8aSmrg</para>
1267e9fcaa8aSmrg
1268e9fcaa8aSmrg<table frame="all" id="readwrite_method_and_the_majorminor_transport_version">
1269eb411b4bSmrg  <?dbfo keep-together="always" ?>
1270eb411b4bSmrg  <title>The read/write method and the major/minor-transport-version</title>
1271eb411b4bSmrg  <tgroup cols="3" colsep='1' rowsep='1'>
1272eb411b4bSmrg  <colspec colname="col1" colwidth='1.0*'/>
1273eb411b4bSmrg  <colspec colname="col2" colwidth='1.0*'/>
1274eb411b4bSmrg  <colspec colname="col3" colwidth="3.0*"/>
1275e9fcaa8aSmrg  <spanspec namest="col1" nameend="col2" spanname="span-horiz" align="center"/>
1276e9fcaa8aSmrg  <thead>
1277e9fcaa8aSmrg    <row>
1278e9fcaa8aSmrg      <entry spanname="span-horiz">Transport-version</entry>
1279e9fcaa8aSmrg      <entry>read/write</entry>
1280e9fcaa8aSmrg    </row>
1281e9fcaa8aSmrg    <row>
1282e9fcaa8aSmrg      <entry>major</entry>
1283e9fcaa8aSmrg      <entry>minor</entry>
1284e9fcaa8aSmrg      <entry></entry>
1285e9fcaa8aSmrg    </row>
1286e9fcaa8aSmrg  </thead>
1287e9fcaa8aSmrg  <tbody>
1288eb411b4bSmrg    <row>
1289e9fcaa8aSmrg      <entry morerows="2">0</entry>
1290e9fcaa8aSmrg      <entry>0</entry>
1291e9fcaa8aSmrg      <entry>only-CM &amp; Property-with-CM</entry>
1292e9fcaa8aSmrg    </row>
1293eb411b4bSmrg    <row>
1294e9fcaa8aSmrg      <entry>1</entry>
1295e9fcaa8aSmrg      <entry>only-CM &amp; multi-CM</entry>
1296e9fcaa8aSmrg    </row>
1297eb411b4bSmrg    <row>
1298e9fcaa8aSmrg      <entry>2</entry>
1299e9fcaa8aSmrg      <entry>only-CM &amp; multi-CM &amp; Property-with-CM</entry>
1300e9fcaa8aSmrg    </row>
1301eb411b4bSmrg    <row>
1302e9fcaa8aSmrg      <entry>1</entry>
1303e9fcaa8aSmrg      <entry>0</entry>
1304e9fcaa8aSmrg      <entry>PropertyNotify</entry>
1305e9fcaa8aSmrg    </row>
1306eb411b4bSmrg    <row>
1307e9fcaa8aSmrg      <entry morerows="1">2</entry>
1308e9fcaa8aSmrg      <entry>0</entry>
1309e9fcaa8aSmrg      <entry>only-CM &amp; PropertyNotify</entry>
1310e9fcaa8aSmrg    </row>
1311e9fcaa8aSmrg    <row>
1312e9fcaa8aSmrg      <entry>1</entry>
1313e9fcaa8aSmrg      <entry>only-CM &amp; multi-CM &amp; PropertyNotify</entry>
1314e9fcaa8aSmrg    </row>
1315e9fcaa8aSmrg  </tbody>
1316e9fcaa8aSmrg  </tgroup>
1317e9fcaa8aSmrg</table>
1318e9fcaa8aSmrg
1319e9fcaa8aSmrg<literallayout class="monospaced">
1320e9fcaa8aSmrgonly-CM            :    data is sent via a ClientMessage
1321e9fcaa8aSmrgmulti-CM           :    data is sent via multiple ClientMessages
1322e9fcaa8aSmrgProperty-with-CM   :    data is written in Property, and its Atom
1323e9fcaa8aSmrg                        is send via ClientMessage
1324e9fcaa8aSmrgPropertyNotify     :    data is written in Property, and its Atom
1325e9fcaa8aSmrg                        is send via PropertyNotify
1326e9fcaa8aSmrg
1327e9fcaa8aSmrg</literallayout>
1328e9fcaa8aSmrg
1329e9fcaa8aSmrg
1330e9fcaa8aSmrg<para>
1331e9fcaa8aSmrgThe method to decide major/minor-transport-version is as follows:
1332e9fcaa8aSmrg</para>
1333e9fcaa8aSmrg
1334e9fcaa8aSmrg<itemizedlist>
1335e9fcaa8aSmrg  <listitem>
1336e9fcaa8aSmrg    <para>
1337e9fcaa8aSmrgThe client sends 0 as major/minor-transport-version to the IM Server.
1338e9fcaa8aSmrgThe client must support all methods in Table 4-3. <!-- xref -->
1339e9fcaa8aSmrgThe client may send another number as major/minor-transport-version to
1340e9fcaa8aSmrguse other method than the above in the future.
1341e9fcaa8aSmrg    </para>
1342e9fcaa8aSmrg  </listitem>
1343e9fcaa8aSmrg  <listitem>
1344e9fcaa8aSmrg    <para>
1345e9fcaa8aSmrgThe IM Server sends its major/minor-transport-version number to
1346e9fcaa8aSmrgthe client. The client sends data using the method specified by the
1347e9fcaa8aSmrgIM Server.
1348e9fcaa8aSmrg    </para>
1349e9fcaa8aSmrg  </listitem>
1350e9fcaa8aSmrg  <listitem>
1351e9fcaa8aSmrg    <para>
1352e9fcaa8aSmrgIf major/minor-transport-version number is not available, it is regarded
1353e9fcaa8aSmrgas 0.
1354e9fcaa8aSmrg    </para>
1355e9fcaa8aSmrg  </listitem>
1356e9fcaa8aSmrg</itemizedlist>
1357e9fcaa8aSmrg
1358e9fcaa8aSmrg<para>
1359e9fcaa8aSmrg(*2) dividing size between ClientMessage and Property
1360e9fcaa8aSmrg</para>
1361e9fcaa8aSmrg
1362e9fcaa8aSmrg<para>
1363e9fcaa8aSmrgIf data is sent via both of multi-CM and Property, specify the dividing
1364e9fcaa8aSmrgsize between ClientMessage and Property. The data, which is smaller than
1365e9fcaa8aSmrgthis size, is sent via multi-CM (or only-CM), and the data, which is
1366e9fcaa8aSmrglager than this size, is sent via Property.
1367e9fcaa8aSmrg</para>
1368e9fcaa8aSmrg
1369e9fcaa8aSmrg</sect3>
1370e9fcaa8aSmrg
1371eb411b4bSmrg<sect3 id='readwrite'>
1372eb411b4bSmrg<title>read/write</title>
1373e9fcaa8aSmrg<para>
1374e9fcaa8aSmrgThe data is transferred via either ClientMessage or Window Property in
1375e9fcaa8aSmrgthe X Window System.
1376e9fcaa8aSmrg</para>
1377e9fcaa8aSmrg
1378e9fcaa8aSmrg<sect4 id="Format_for_the_data_from_the_Client_to_the_IM_Server">
1379e9fcaa8aSmrg<title>Format for the data from the Client to the IM Server</title>
1380e9fcaa8aSmrg<para>
1381e9fcaa8aSmrg<emphasis role="bold">ClientMessage</emphasis>
1382e9fcaa8aSmrg</para>
1383e9fcaa8aSmrg
1384e9fcaa8aSmrg<para>
1385e9fcaa8aSmrgIf data is sent via ClientMessage event, the format is as follows:
1386e9fcaa8aSmrg</para>
1387e9fcaa8aSmrg
1388eb411b4bSmrg<table frame="topbot" id="clientmessage_events_format_first_or_middle">
1389eb411b4bSmrg  <?dbfo keep-together="always" ?>
1390e9fcaa8aSmrg  <title>The ClientMessage event's format (first or middle)</title>
1391eb411b4bSmrg  <tgroup cols="3" align='left' colsep='0' rowsep='0'>
1392eb411b4bSmrg  <colspec colname="col1" colwidth='1.0*'/>
1393eb411b4bSmrg  <colspec colname="col2" colwidth='1.0*' colsep="1"/>
1394eb411b4bSmrg  <colspec colname="col3" colwidth="3.5*"/>
1395eb411b4bSmrg  <spanspec namest="col1" nameend="col2" spanname="span-horiz"/>
1396e9fcaa8aSmrg  <thead>
1397eb411b4bSmrg    <row rowsep='1'>
1398eb411b4bSmrg      <entry spanname="span-horiz" colsep='1'>Structure Member</entry>
1399eb411b4bSmrg      <entry>Contents</entry>
1400e9fcaa8aSmrg    </row>
1401e9fcaa8aSmrg  </thead>
1402e9fcaa8aSmrg  <tbody>
1403eb411b4bSmrg    <row>
1404e9fcaa8aSmrg      <entry>int</entry>
1405e9fcaa8aSmrg      <entry>type</entry>
1406e9fcaa8aSmrg      <entry>ClientMessage</entry>
1407e9fcaa8aSmrg    </row>
1408eb411b4bSmrg    <row>
1409e9fcaa8aSmrg      <entry>u_long</entry>
1410e9fcaa8aSmrg      <entry>serial</entry>
1411e9fcaa8aSmrg      <entry>Set by the X Window System</entry>
1412e9fcaa8aSmrg    </row>
1413eb411b4bSmrg    <row>
1414e9fcaa8aSmrg      <entry>Bool</entry>
1415e9fcaa8aSmrg      <entry>send_event</entry>
1416e9fcaa8aSmrg      <entry>Set by the X Window System</entry>
1417e9fcaa8aSmrg    </row>
1418eb411b4bSmrg    <row>
1419e9fcaa8aSmrg      <entry>Display</entry>
1420e9fcaa8aSmrg      <entry>*display</entry>
1421e9fcaa8aSmrg      <entry>The display to which connects</entry>
1422e9fcaa8aSmrg    </row>
1423eb411b4bSmrg    <row>
1424e9fcaa8aSmrg      <entry>Window</entry>
1425e9fcaa8aSmrg      <entry>window</entry>
1426e9fcaa8aSmrg      <entry>IMS Window ID</entry>
1427e9fcaa8aSmrg    </row>
1428eb411b4bSmrg    <row>
1429e9fcaa8aSmrg      <entry>Atom</entry>
1430e9fcaa8aSmrg      <entry>message_type</entry>
1431e9fcaa8aSmrg      <entry>XInternAtom(display, "_XIM_MOREDATA", False)</entry>
1432e9fcaa8aSmrg    </row>
1433eb411b4bSmrg    <row>
1434e9fcaa8aSmrg      <entry>int</entry>
1435e9fcaa8aSmrg      <entry>format</entry>
1436e9fcaa8aSmrg      <entry>8</entry>
1437e9fcaa8aSmrg    </row>
1438eb411b4bSmrg    <row>
1439e9fcaa8aSmrg      <entry>char</entry>
1440e9fcaa8aSmrg      <entry>data.b[20]</entry>
1441e9fcaa8aSmrg      <entry>(read/write DATA : 20 byte)</entry>
1442e9fcaa8aSmrg    </row>
1443e9fcaa8aSmrg  </tbody>
1444e9fcaa8aSmrg  </tgroup>
1445e9fcaa8aSmrg</table>
1446e9fcaa8aSmrg
1447e9fcaa8aSmrg
1448e9fcaa8aSmrg
1449eb411b4bSmrg<table frame="topbot" id="clientmessage_events_format_only_or_last">
1450eb411b4bSmrg  <?dbfo keep-together="always" ?>
1451e9fcaa8aSmrg  <title>The ClientMessage event's format (only or last)</title>
1452eb411b4bSmrg  <tgroup cols="3" align='left' colsep='0' rowsep='0'>
1453eb411b4bSmrg  <colspec colname="col1" colwidth='1.0*'/>
1454eb411b4bSmrg  <colspec colname="col2" colwidth='1.0*' colsep="1"/>
1455eb411b4bSmrg  <colspec colname="col3" colwidth="3.5*"/>
1456eb411b4bSmrg  <spanspec namest="col1" nameend="col2" spanname="span-horiz"/>
1457e9fcaa8aSmrg  <thead>
1458eb411b4bSmrg    <row rowsep='1'>
1459eb411b4bSmrg      <entry spanname="span-horiz" colsep='1'>Structure Member</entry>
1460eb411b4bSmrg      <entry>Contents</entry>
1461e9fcaa8aSmrg    </row>
1462e9fcaa8aSmrg  </thead>
1463e9fcaa8aSmrg  <tbody>
1464eb411b4bSmrg    <row>
1465e9fcaa8aSmrg      <entry>int</entry>
1466e9fcaa8aSmrg      <entry>type</entry>
1467e9fcaa8aSmrg      <entry>ClientMessage</entry>
1468e9fcaa8aSmrg    </row>
1469eb411b4bSmrg    <row>
1470e9fcaa8aSmrg      <entry>u_long</entry>
1471e9fcaa8aSmrg      <entry>serial</entry>
1472e9fcaa8aSmrg      <entry>Set by the X Window System</entry>
1473e9fcaa8aSmrg    </row>
1474eb411b4bSmrg    <row>
1475e9fcaa8aSmrg      <entry>Bool</entry>
1476e9fcaa8aSmrg      <entry>send_event</entry>
1477e9fcaa8aSmrg      <entry>Set by the X Window System</entry>
1478e9fcaa8aSmrg    </row>
1479eb411b4bSmrg    <row>
1480e9fcaa8aSmrg      <entry>Display</entry>
1481e9fcaa8aSmrg      <entry>*display</entry>
1482e9fcaa8aSmrg      <entry>The display to which connects</entry>
1483e9fcaa8aSmrg    </row>
1484eb411b4bSmrg    <row>
1485e9fcaa8aSmrg      <entry>Window</entry>
1486e9fcaa8aSmrg      <entry>window</entry>
1487e9fcaa8aSmrg      <entry>IMS Window ID</entry>
1488e9fcaa8aSmrg    </row>
1489eb411b4bSmrg    <row>
1490e9fcaa8aSmrg      <entry>Atom</entry>
1491e9fcaa8aSmrg      <entry>message_type</entry>
1492e9fcaa8aSmrg      <entry>XInternAtom(display, "_XIM_PROTOCOL", False)</entry>
1493e9fcaa8aSmrg    </row>
1494eb411b4bSmrg    <row>
1495e9fcaa8aSmrg      <entry>int</entry>
1496e9fcaa8aSmrg      <entry>format</entry>
1497e9fcaa8aSmrg      <entry>8</entry>
1498e9fcaa8aSmrg    </row>
1499eb411b4bSmrg    <row>
1500e9fcaa8aSmrg      <entry>char</entry>
1501e9fcaa8aSmrg      <entry>data.b[20]</entry>
1502e9fcaa8aSmrg      <entry>(read/write DATA : MAX 20 byte)
1503e9fcaa8aSmrg<footnote><para>If the data is smaller
1504e9fcaa8aSmrgthan 20 bytes, all data other than available data must be 0.
1505e9fcaa8aSmrg</para></footnote>
1506e9fcaa8aSmrg      </entry>
1507e9fcaa8aSmrg    </row>
1508e9fcaa8aSmrg  </tbody>
1509e9fcaa8aSmrg  </tgroup>
1510e9fcaa8aSmrg</table>
1511e9fcaa8aSmrg
1512e9fcaa8aSmrg<para>
1513e9fcaa8aSmrg<emphasis role="bold">Property</emphasis>
1514e9fcaa8aSmrg</para>
1515e9fcaa8aSmrg
1516e9fcaa8aSmrg<para>
1517e9fcaa8aSmrgIn the case of large data, data will be sent via the Window Property
1518e9fcaa8aSmrgfor the efficiency.  There are the following two methods to notify
1519e9fcaa8aSmrgProperty, and transport-version is decided which method is used.
1520e9fcaa8aSmrg</para>
1521e9fcaa8aSmrg
1522e9fcaa8aSmrg<itemizedlist>
1523e9fcaa8aSmrg  <listitem>
1524e9fcaa8aSmrg    <para>
1525e9fcaa8aSmrgThe XChangeProperty function is used to store data in the client
1526e9fcaa8aSmrgcommunication window, and Atom of the stored data is notified to the
1527e9fcaa8aSmrgIM Server via ClientMessage event.
1528e9fcaa8aSmrg    </para>
1529e9fcaa8aSmrg  </listitem>
1530e9fcaa8aSmrg  <listitem>
1531e9fcaa8aSmrg    <para>
1532e9fcaa8aSmrgThe XChangeProperty function is used to store data in the client
1533e9fcaa8aSmrgcommunication window, and Atom of the stored data is notified to the
1534e9fcaa8aSmrgIM Server via PropertyNotify event.
1535e9fcaa8aSmrg    </para>
1536e9fcaa8aSmrg  </listitem>
1537e9fcaa8aSmrg</itemizedlist>
1538e9fcaa8aSmrg
1539e9fcaa8aSmrg<para>
1540e9fcaa8aSmrgThe arguments of the XChangeProperty are as follows:
1541e9fcaa8aSmrg</para>
1542e9fcaa8aSmrg
1543e9fcaa8aSmrg
1544eb411b4bSmrg<table frame="topbot" id="xchangeproperty_events_format">
1545eb411b4bSmrg  <?dbfo keep-together="always" ?>
1546e9fcaa8aSmrg  <title>The XChangeProperty event's format</title>
1547eb411b4bSmrg  <tgroup cols="3" align='left' colsep='0' rowsep='0'>
1548eb411b4bSmrg  <colspec colname="col1" colwidth='1.0*'/>
1549eb411b4bSmrg  <colspec colname="col2" colwidth='1.0*' colsep="1"/>
1550eb411b4bSmrg  <colspec colname="col3" colwidth="3.5*"/>
1551e9fcaa8aSmrg  <spanspec namest="col1" nameend="col2" spanname="span-horiz" align="left"/>
1552e9fcaa8aSmrg  <thead>
1553eb411b4bSmrg    <row rowsep='1'>
1554eb411b4bSmrg      <entry spanname="span-horiz" colsep='1'>Argument</entry>
1555eb411b4bSmrg      <entry>Contents</entry>
1556e9fcaa8aSmrg    </row>
1557e9fcaa8aSmrg  </thead>
1558e9fcaa8aSmrg  <tbody>
1559eb411b4bSmrg    <row>
1560e9fcaa8aSmrg      <entry>Display</entry>
1561e9fcaa8aSmrg      <entry>*display</entry>
1562e9fcaa8aSmrg      <entry>The display to which connects</entry>
1563e9fcaa8aSmrg    </row>
1564eb411b4bSmrg    <row>
1565e9fcaa8aSmrg      <entry>Window</entry>
1566e9fcaa8aSmrg      <entry>window</entry>
1567e9fcaa8aSmrg      <entry>IMS communication window ID</entry>
1568e9fcaa8aSmrg    </row>
1569eb411b4bSmrg    <row>
1570e9fcaa8aSmrg      <entry>Atom</entry>
1571e9fcaa8aSmrg      <entry>property</entry>
1572e9fcaa8aSmrg      <entry>read/write property Atom (*1)</entry>
1573e9fcaa8aSmrg    </row>
1574eb411b4bSmrg    <row>
1575e9fcaa8aSmrg      <entry>int</entry>
1576e9fcaa8aSmrg      <entry>format</entry>
1577e9fcaa8aSmrg      <entry>8</entry>
1578e9fcaa8aSmrg    </row>
1579eb411b4bSmrg    <row>
1580e9fcaa8aSmrg      <entry>int</entry>
1581e9fcaa8aSmrg      <entry>mode</entry>
1582e9fcaa8aSmrg      <entry>PropModeAppend</entry>
1583e9fcaa8aSmrg    </row>
1584eb411b4bSmrg    <row>
1585e9fcaa8aSmrg      <entry>u_char</entry>
1586e9fcaa8aSmrg      <entry>*data</entry>
1587e9fcaa8aSmrg      <entry>read/write DATA</entry>
1588e9fcaa8aSmrg    </row>
1589eb411b4bSmrg    <row>
1590e9fcaa8aSmrg      <entry>int</entry>
1591e9fcaa8aSmrg      <entry>nelements</entry>
1592e9fcaa8aSmrg      <entry>length of DATA</entry>
1593e9fcaa8aSmrg    </row>
1594e9fcaa8aSmrg  </tbody>
1595e9fcaa8aSmrg  </tgroup>
1596e9fcaa8aSmrg</table>
1597e9fcaa8aSmrg
1598e9fcaa8aSmrg<para>
1599e9fcaa8aSmrg(*1) The read/write property ATOM allocates the following strings by
1600eb411b4bSmrg<olink targetdoc='libX11' targetptr='XInternAtom'><function>XInternAtom</function></olink>.
1601e9fcaa8aSmrg"_clientXXX"
1602e9fcaa8aSmrg</para>
1603e9fcaa8aSmrg
1604e9fcaa8aSmrg<para>
1605e9fcaa8aSmrgThe client changes the property with the mode of PropModeAppend and
1606e9fcaa8aSmrgthe IM Server will read it with the delete mode i.e. (delete = True).
1607e9fcaa8aSmrg</para>
1608e9fcaa8aSmrg
1609e9fcaa8aSmrg<para>
1610e9fcaa8aSmrgIf Atom is notified via ClientMessage event, the format of the ClientMessage
1611e9fcaa8aSmrgis as follows:
1612e9fcaa8aSmrg</para>
1613e9fcaa8aSmrg
1614eb411b4bSmrg<table frame="topbot" id="clientmessage_events_format_to_send_atom_of_property">
1615eb411b4bSmrg  <?dbfo keep-together="always" ?>
1616e9fcaa8aSmrg  <title>The ClientMessage event's format to send Atom of property</title>
1617eb411b4bSmrg  <tgroup cols="3" align='left' colsep='0' rowsep='0'>
1618eb411b4bSmrg  <colspec colname="col1" colwidth='1.0*'/>
1619eb411b4bSmrg  <colspec colname="col2" colwidth='1.0*' colsep="1"/>
1620eb411b4bSmrg  <colspec colname="col3" colwidth="3.5*"/>
1621eb411b4bSmrg  <spanspec namest="col1" nameend="col2" spanname="span-horiz"/>
1622e9fcaa8aSmrg  <thead>
1623eb411b4bSmrg    <row rowsep='1'>
1624eb411b4bSmrg      <entry spanname="span-horiz" colsep='1'>Structure Member</entry>
1625eb411b4bSmrg      <entry>Contents</entry>
1626e9fcaa8aSmrg    </row>
1627e9fcaa8aSmrg  </thead>
1628e9fcaa8aSmrg  <tbody>
1629eb411b4bSmrg    <row>
1630e9fcaa8aSmrg      <entry>int</entry>
1631e9fcaa8aSmrg      <entry>type</entry>
1632e9fcaa8aSmrg      <entry>ClientMessage</entry>
1633e9fcaa8aSmrg    </row>
1634eb411b4bSmrg    <row>
1635e9fcaa8aSmrg      <entry>u_long</entry>
1636e9fcaa8aSmrg      <entry>serial</entry>
1637e9fcaa8aSmrg      <entry>Set by the X Window System</entry>
1638e9fcaa8aSmrg    </row>
1639eb411b4bSmrg    <row>
1640e9fcaa8aSmrg      <entry>Bool</entry>
1641e9fcaa8aSmrg      <entry>send_event</entry>
1642e9fcaa8aSmrg      <entry>Set by the X Window System</entry>
1643e9fcaa8aSmrg    </row>
1644eb411b4bSmrg    <row>
1645e9fcaa8aSmrg      <entry>Display</entry>
1646e9fcaa8aSmrg      <entry>*display</entry>
1647e9fcaa8aSmrg      <entry>The display to which connects</entry>
1648e9fcaa8aSmrg    </row>
1649eb411b4bSmrg    <row>
1650e9fcaa8aSmrg      <entry>Window</entry>
1651e9fcaa8aSmrg      <entry>window</entry>
1652e9fcaa8aSmrg      <entry>IMS Window ID</entry>
1653e9fcaa8aSmrg    </row>
1654eb411b4bSmrg    <row>
1655e9fcaa8aSmrg      <entry>Atom</entry>
1656e9fcaa8aSmrg      <entry>message_type</entry>
1657e9fcaa8aSmrg      <entry>XInternAtom(display, "_XIM_PROTOCOL", False)</entry>
1658e9fcaa8aSmrg    </row>
1659eb411b4bSmrg    <row>
1660e9fcaa8aSmrg      <entry>int</entry>
1661e9fcaa8aSmrg      <entry>format</entry>
1662e9fcaa8aSmrg      <entry>8</entry>
1663e9fcaa8aSmrg    </row>
1664eb411b4bSmrg    <row>
1665e9fcaa8aSmrg      <entry>long</entry>
1666e9fcaa8aSmrg      <entry>data.1[0]</entry>
1667e9fcaa8aSmrg      <entry>length of read/write property Atom</entry>
1668e9fcaa8aSmrg    </row>
1669eb411b4bSmrg    <row>
1670e9fcaa8aSmrg      <entry>long</entry>
1671e9fcaa8aSmrg      <entry>data.1[1]</entry>
1672e9fcaa8aSmrg      <entry>read/write property Atom</entry>
1673e9fcaa8aSmrg    </row>
1674e9fcaa8aSmrg  </tbody>
1675e9fcaa8aSmrg  </tgroup>
1676e9fcaa8aSmrg</table>
1677e9fcaa8aSmrg</sect4>
1678e9fcaa8aSmrg
1679e9fcaa8aSmrg<sect4 id="Format_for_the_data_from_the_IM_Server_to_the_Client">
1680e9fcaa8aSmrg<title>Format for the data from the IM Server to the Client</title>
1681e9fcaa8aSmrg<para>
1682e9fcaa8aSmrg<emphasis role="bold">ClientMessage</emphasis>
1683e9fcaa8aSmrg</para>
1684e9fcaa8aSmrg
1685e9fcaa8aSmrg<para>
1686e9fcaa8aSmrgThe format of the ClientMessage is as follows:
1687e9fcaa8aSmrg</para>
1688e9fcaa8aSmrg
1689eb411b4bSmrg<table frame="topbot" id="clientmessage_events_format_first_or_middle_2">
1690eb411b4bSmrg  <?dbfo keep-together="always" ?>
1691e9fcaa8aSmrg  <title>The ClientMessage event's format (first or middle)</title>
1692eb411b4bSmrg  <tgroup cols="3" align='left' colsep='0' rowsep='0'>
1693eb411b4bSmrg  <colspec colname="col1" colwidth='1.0*'/>
1694eb411b4bSmrg  <colspec colname="col2" colwidth='1.0*' colsep="1"/>
1695eb411b4bSmrg  <colspec colname="col3" colwidth="3.5*"/>
1696eb411b4bSmrg  <spanspec namest="col1" nameend="col2" spanname="span-horiz"/>
1697e9fcaa8aSmrg  <thead>
1698eb411b4bSmrg    <row rowsep='1'>
1699eb411b4bSmrg      <entry spanname="span-horiz" colsep='1'>Structure Member</entry>
1700eb411b4bSmrg      <entry>Contents</entry>
1701e9fcaa8aSmrg    </row>
1702e9fcaa8aSmrg  </thead>
1703e9fcaa8aSmrg  <tbody>
1704eb411b4bSmrg    <row>
1705e9fcaa8aSmrg      <entry>int</entry>
1706e9fcaa8aSmrg      <entry>type</entry>
1707e9fcaa8aSmrg      <entry>ClientMessage</entry>
1708e9fcaa8aSmrg    </row>
1709eb411b4bSmrg    <row>
1710e9fcaa8aSmrg      <entry>u_long</entry>
1711e9fcaa8aSmrg      <entry>serial</entry>
1712e9fcaa8aSmrg      <entry>Set by the X Window System</entry>
1713e9fcaa8aSmrg    </row>
1714eb411b4bSmrg    <row>
1715e9fcaa8aSmrg      <entry>Bool</entry>
1716e9fcaa8aSmrg      <entry>send_event</entry>
1717e9fcaa8aSmrg      <entry>Set by the X Window System</entry>
1718e9fcaa8aSmrg    </row>
1719eb411b4bSmrg    <row>
1720e9fcaa8aSmrg      <entry>Display</entry>
1721e9fcaa8aSmrg      <entry>*display</entry>
1722e9fcaa8aSmrg      <entry>The display to which connects</entry>
1723e9fcaa8aSmrg    </row>
1724eb411b4bSmrg    <row>
1725e9fcaa8aSmrg      <entry>Window</entry>
1726e9fcaa8aSmrg      <entry>window</entry>
1727e9fcaa8aSmrg      <entry>IMS Window ID</entry>
1728e9fcaa8aSmrg    </row>
1729eb411b4bSmrg    <row>
1730e9fcaa8aSmrg      <entry>Atom</entry>
1731e9fcaa8aSmrg      <entry>message_type</entry>
1732e9fcaa8aSmrg      <entry>XInternAtom(display, "_XIM_MOREDATA", False)</entry>
1733e9fcaa8aSmrg    </row>
1734eb411b4bSmrg    <row>
1735e9fcaa8aSmrg      <entry>int</entry>
1736e9fcaa8aSmrg      <entry>format</entry>
1737e9fcaa8aSmrg      <entry>8</entry>
1738e9fcaa8aSmrg    </row>
1739eb411b4bSmrg    <row>
1740e9fcaa8aSmrg      <entry>char</entry>
1741e9fcaa8aSmrg      <entry>data.b[20]</entry>
1742e9fcaa8aSmrg      <entry>(read/write DATA : 20 byte)</entry>
1743e9fcaa8aSmrg    </row>
1744e9fcaa8aSmrg  </tbody>
1745e9fcaa8aSmrg  </tgroup>
1746e9fcaa8aSmrg</table>
1747e9fcaa8aSmrg
1748e9fcaa8aSmrg
1749e9fcaa8aSmrg
1750e9fcaa8aSmrg
1751e9fcaa8aSmrg
1752eb411b4bSmrg<table frame="topbot" id="clientmessage_events_format_only_or_last_2">
1753eb411b4bSmrg  <?dbfo keep-together="always" ?>
1754e9fcaa8aSmrg  <title>The ClientMessage event's format (only or last)</title>
1755eb411b4bSmrg  <tgroup cols="3" align='left' colsep='0' rowsep='0'>
1756eb411b4bSmrg  <colspec colname="col1" colwidth='1.0*'/>
1757eb411b4bSmrg  <colspec colname="col2" colwidth='1.0*' colsep="1"/>
1758eb411b4bSmrg  <colspec colname="col3" colwidth="3.5*"/>
1759eb411b4bSmrg  <spanspec namest="col1" nameend="col2" spanname="span-horiz"/>
1760e9fcaa8aSmrg  <thead>
1761eb411b4bSmrg    <row rowsep='1'>
1762eb411b4bSmrg      <entry spanname="span-horiz" colsep='1'>Structure Member</entry>
1763eb411b4bSmrg      <entry>Contents</entry>
1764e9fcaa8aSmrg    </row>
1765e9fcaa8aSmrg  </thead>
1766e9fcaa8aSmrg  <tbody>
1767eb411b4bSmrg    <row>
1768e9fcaa8aSmrg      <entry>int</entry>
1769e9fcaa8aSmrg      <entry>type</entry>
1770e9fcaa8aSmrg      <entry>ClientMessage</entry>
1771e9fcaa8aSmrg    </row>
1772eb411b4bSmrg    <row>
1773e9fcaa8aSmrg      <entry>u_long</entry>
1774e9fcaa8aSmrg      <entry>serial</entry>
1775e9fcaa8aSmrg      <entry>Set by the X Window System</entry>
1776e9fcaa8aSmrg    </row>
1777eb411b4bSmrg    <row>
1778e9fcaa8aSmrg      <entry>Bool</entry>
1779e9fcaa8aSmrg      <entry>send_event</entry>
1780e9fcaa8aSmrg      <entry>Set by the X Window System</entry>
1781e9fcaa8aSmrg    </row>
1782eb411b4bSmrg    <row>
1783e9fcaa8aSmrg      <entry>Display</entry>
1784e9fcaa8aSmrg      <entry>*display</entry>
1785e9fcaa8aSmrg      <entry>The display to which connects</entry>
1786e9fcaa8aSmrg    </row>
1787eb411b4bSmrg    <row>
1788e9fcaa8aSmrg      <entry>Window</entry>
1789e9fcaa8aSmrg      <entry>window</entry>
1790e9fcaa8aSmrg      <entry>IMS Window ID</entry>
1791e9fcaa8aSmrg    </row>
1792eb411b4bSmrg    <row>
1793e9fcaa8aSmrg      <entry>Atom</entry>
1794e9fcaa8aSmrg      <entry>message_type</entry>
1795e9fcaa8aSmrg      <entry>XInternAtom(display, "_XIM_PROTOCOL", False)</entry>
1796e9fcaa8aSmrg    </row>
1797eb411b4bSmrg    <row>
1798e9fcaa8aSmrg      <entry>int</entry>
1799e9fcaa8aSmrg      <entry>format</entry>
1800e9fcaa8aSmrg      <entry>8</entry>
1801e9fcaa8aSmrg    </row>
1802eb411b4bSmrg    <row>
1803e9fcaa8aSmrg      <entry>char</entry>
1804e9fcaa8aSmrg      <entry>data.b[20]</entry>
1805e9fcaa8aSmrg      <entry>(read/write DATA : MAX 20 byte) (*1)</entry>
1806e9fcaa8aSmrg    </row>
1807e9fcaa8aSmrg  </tbody>
1808e9fcaa8aSmrg  </tgroup>
1809e9fcaa8aSmrg</table>
1810e9fcaa8aSmrg
1811e9fcaa8aSmrg<para>
1812e9fcaa8aSmrg(*1) If the data size is smaller than 20 bytes, all data other than available
1813e9fcaa8aSmrgdata must be 0.
1814e9fcaa8aSmrg</para>
1815e9fcaa8aSmrg
1816e9fcaa8aSmrg<para>
1817e9fcaa8aSmrg<emphasis role="bold">Property</emphasis>
1818e9fcaa8aSmrg</para>
1819e9fcaa8aSmrg
1820e9fcaa8aSmrg<para>
1821e9fcaa8aSmrgIn the case of large data, data will be sent via the Window Property
1822e9fcaa8aSmrgfor the efficiency. There are the following two methods to notify
1823e9fcaa8aSmrgProperty, and transport-version is decided which method is used.
1824e9fcaa8aSmrg</para>
1825e9fcaa8aSmrg
1826e9fcaa8aSmrg<itemizedlist>
1827e9fcaa8aSmrg  <listitem>
1828e9fcaa8aSmrg    <para>
1829e9fcaa8aSmrgThe XChangeProperty function is used to store data in the IMS
1830e9fcaa8aSmrgcommunication window, and Atom of the property is sent via the
1831e9fcaa8aSmrgClientMessage event.
1832e9fcaa8aSmrg    </para>
1833e9fcaa8aSmrg  </listitem>
1834e9fcaa8aSmrg  <listitem>
1835e9fcaa8aSmrg    <para>
1836e9fcaa8aSmrgThe XChangeProperty function is used to store data in the IMS
1837e9fcaa8aSmrgcommunication window, and Atom of the property is sent via
1838e9fcaa8aSmrgPropertyNotify event.
1839e9fcaa8aSmrg    </para>
1840e9fcaa8aSmrg  </listitem>
1841e9fcaa8aSmrg</itemizedlist>
1842e9fcaa8aSmrg
1843e9fcaa8aSmrg<para>
1844e9fcaa8aSmrgThe arguments of the XChangeProperty are as follows:
1845e9fcaa8aSmrg</para>
1846e9fcaa8aSmrg
1847eb411b4bSmrg<table frame="topbot" id="xchangeproperty_events_format_b">
1848eb411b4bSmrg  <?dbfo keep-together="always" ?>
1849e9fcaa8aSmrg  <title>The XChangeProperty event's format</title>
1850eb411b4bSmrg  <tgroup cols="3" align='left' colsep='0' rowsep='0'>
1851eb411b4bSmrg  <colspec colname="col1" colwidth='1.0*'/>
1852eb411b4bSmrg  <colspec colname="col2" colwidth='1.0*' colsep="1"/>
1853eb411b4bSmrg  <colspec colname="col3" colwidth="3.5*"/>
1854e9fcaa8aSmrg  <spanspec namest="col1" nameend="col2" spanname="span-horiz" align="left"/>
1855e9fcaa8aSmrg  <thead>
1856eb411b4bSmrg    <row rowsep='1'>
1857eb411b4bSmrg      <entry spanname="span-horiz" colsep='1'>Argument</entry>
1858eb411b4bSmrg      <entry>Contents</entry>
1859e9fcaa8aSmrg    </row>
1860e9fcaa8aSmrg  </thead>
1861e9fcaa8aSmrg  <tbody>
1862eb411b4bSmrg    <row>
1863e9fcaa8aSmrg      <entry>Display</entry>
1864e9fcaa8aSmrg      <entry>*display</entry>
1865e9fcaa8aSmrg      <entry>The display to which connects</entry>
1866e9fcaa8aSmrg    </row>
1867eb411b4bSmrg    <row>
1868e9fcaa8aSmrg      <entry>Window</entry>
1869e9fcaa8aSmrg      <entry>window</entry>
1870e9fcaa8aSmrg      <entry>IMS communication window ID</entry>
1871e9fcaa8aSmrg    </row>
1872eb411b4bSmrg    <row>
1873e9fcaa8aSmrg      <entry>Atom</entry>
1874e9fcaa8aSmrg      <entry>property</entry>
1875e9fcaa8aSmrg      <entry>read/write property Atom (*1)</entry>
1876e9fcaa8aSmrg    </row>
1877eb411b4bSmrg    <row>
1878e9fcaa8aSmrg      <entry>int</entry>
1879e9fcaa8aSmrg      <entry>format</entry>
1880e9fcaa8aSmrg      <entry>8</entry>
1881e9fcaa8aSmrg    </row>
1882eb411b4bSmrg    <row>
1883e9fcaa8aSmrg      <entry>int</entry>
1884e9fcaa8aSmrg      <entry>mode</entry>
1885e9fcaa8aSmrg      <entry>PropModeAppend</entry>
1886e9fcaa8aSmrg    </row>
1887eb411b4bSmrg    <row>
1888e9fcaa8aSmrg      <entry>u_char</entry>
1889e9fcaa8aSmrg      <entry>*data</entry>
1890e9fcaa8aSmrg      <entry>read/write DATA</entry>
1891e9fcaa8aSmrg    </row>
1892eb411b4bSmrg    <row>
1893e9fcaa8aSmrg      <entry>int</entry>
1894e9fcaa8aSmrg      <entry>nelements</entry>
1895e9fcaa8aSmrg      <entry>length of DATA</entry>
1896e9fcaa8aSmrg    </row>
1897e9fcaa8aSmrg  </tbody>
1898e9fcaa8aSmrg  </tgroup>
1899e9fcaa8aSmrg</table>
1900e9fcaa8aSmrg
1901e9fcaa8aSmrg<para>
1902e9fcaa8aSmrg(*1) The read/write property ATOM allocates some strings, which are not
1903eb411b4bSmrgallocated by the client, by <olink targetdoc='libX11' targetptr='XInternAtom'><function>XInternAtom</function></olink>.
1904e9fcaa8aSmrg</para>
1905e9fcaa8aSmrg
1906e9fcaa8aSmrg<para>
1907e9fcaa8aSmrgThe IM Server changes the property with the mode of PropModeAppend and
1908e9fcaa8aSmrgthe client reads it with the delete mode, i.e. (delete = True).
1909e9fcaa8aSmrg</para>
1910e9fcaa8aSmrg
1911e9fcaa8aSmrg<para>
1912e9fcaa8aSmrgIf Atom is notified via ClientMessage event, the format of the ClientMessage
1913e9fcaa8aSmrgis as follows:
1914e9fcaa8aSmrg</para>
1915e9fcaa8aSmrg
1916eb411b4bSmrg<table frame="topbot" id="clientmessage_events_format_to_send_atom_of_property_2">
1917eb411b4bSmrg  <?dbfo keep-together="always" ?>
1918e9fcaa8aSmrg  <title>The ClientMessage event's format to send Atom of property</title>
1919eb411b4bSmrg  <tgroup cols="3" align='left' colsep='0' rowsep='0'>
1920eb411b4bSmrg  <colspec colname="col1" colwidth='1.0*'/>
1921eb411b4bSmrg  <colspec colname="col2" colwidth='1.0*' colsep="1"/>
1922eb411b4bSmrg  <colspec colname="col3" colwidth="3.5*"/>
1923eb411b4bSmrg  <spanspec namest="col1" nameend="col2" spanname="span-horiz"/>
1924e9fcaa8aSmrg  <thead>
1925eb411b4bSmrg    <row rowsep='1'>
1926eb411b4bSmrg      <entry spanname="span-horiz" colsep='1'>Structure Member</entry>
1927eb411b4bSmrg      <entry>Contents</entry>
1928e9fcaa8aSmrg    </row>
1929e9fcaa8aSmrg  </thead>
1930e9fcaa8aSmrg  <tbody>
1931eb411b4bSmrg    <row>
1932e9fcaa8aSmrg      <entry>int</entry>
1933e9fcaa8aSmrg      <entry>type</entry>
1934e9fcaa8aSmrg      <entry>ClientMessage</entry>
1935e9fcaa8aSmrg    </row>
1936eb411b4bSmrg    <row>
1937e9fcaa8aSmrg      <entry>u_long</entry>
1938e9fcaa8aSmrg      <entry>serial</entry>
1939e9fcaa8aSmrg      <entry>Set by the X Window System</entry>
1940e9fcaa8aSmrg    </row>
1941eb411b4bSmrg    <row>
1942e9fcaa8aSmrg      <entry>Bool</entry>
1943e9fcaa8aSmrg      <entry>send_event</entry>
1944e9fcaa8aSmrg      <entry>Set by the X Window System</entry>
1945e9fcaa8aSmrg    </row>
1946eb411b4bSmrg    <row>
1947e9fcaa8aSmrg      <entry>Display</entry>
1948e9fcaa8aSmrg      <entry>*display</entry>
1949e9fcaa8aSmrg      <entry>The display to which connects</entry>
1950e9fcaa8aSmrg    </row>
1951eb411b4bSmrg    <row>
1952e9fcaa8aSmrg      <entry>Window</entry>
1953e9fcaa8aSmrg      <entry>window</entry>
1954e9fcaa8aSmrg      <entry>IMS Window ID</entry>
1955e9fcaa8aSmrg    </row>
1956eb411b4bSmrg    <row>
1957e9fcaa8aSmrg      <entry>Atom</entry>
1958e9fcaa8aSmrg      <entry>message_type</entry>
1959e9fcaa8aSmrg      <entry>XInternAtom(display, "_XIM_PROTOCOL", False)</entry>
1960e9fcaa8aSmrg    </row>
1961eb411b4bSmrg    <row>
1962e9fcaa8aSmrg      <entry>int</entry>
1963e9fcaa8aSmrg      <entry>format</entry>
1964e9fcaa8aSmrg      <entry>8</entry>
1965e9fcaa8aSmrg    </row>
1966eb411b4bSmrg    <row>
1967e9fcaa8aSmrg      <entry>long</entry>
1968e9fcaa8aSmrg      <entry>data.1[0]</entry>
1969e9fcaa8aSmrg      <entry>length of read/write property Atom</entry>
1970e9fcaa8aSmrg    </row>
1971eb411b4bSmrg    <row>
1972e9fcaa8aSmrg      <entry>long</entry>
1973e9fcaa8aSmrg      <entry>data.1[1]</entry>
1974e9fcaa8aSmrg      <entry>read/write property Atom</entry>
1975e9fcaa8aSmrg    </row>
1976e9fcaa8aSmrg  </tbody>
1977e9fcaa8aSmrg  </tgroup>
1978e9fcaa8aSmrg</table>
1979e9fcaa8aSmrg
1980e9fcaa8aSmrg</sect4>
1981e9fcaa8aSmrg</sect3>
1982e9fcaa8aSmrg<sect3 id="Closing_Connection">
1983e9fcaa8aSmrg<title>Closing Connection</title>
1984e9fcaa8aSmrg
1985e9fcaa8aSmrg<para>
1986e9fcaa8aSmrgIf the client disconnect with the IM Server, shutdown function should
1987e9fcaa8aSmrgfree the communication window properties and etc..
1988e9fcaa8aSmrg</para>
1989e9fcaa8aSmrg
1990e9fcaa8aSmrg</sect3>
1991e9fcaa8aSmrg</sect2>
1992e9fcaa8aSmrg</sect1>
1993e9fcaa8aSmrg
1994e9fcaa8aSmrg<sect1 id="References">
1995e9fcaa8aSmrg<title>References</title>
1996e9fcaa8aSmrg<para>
1997e9fcaa8aSmrg[1] Masahiko Narita and Hideki Hiura, <emphasis remap='I'>"The Input Method Protocol"</emphasis>
1998e9fcaa8aSmrg</para>
1999e9fcaa8aSmrg</sect1>
2000e9fcaa8aSmrg
2001e9fcaa8aSmrg</chapter>
2002e9fcaa8aSmrg</book>
2003