diff options
Diffstat (limited to 'libX11/specs/i18n/Trans.ms')
-rw-r--r-- | libX11/specs/i18n/Trans.ms | 1148 |
1 files changed, 1148 insertions, 0 deletions
diff --git a/libX11/specs/i18n/Trans.ms b/libX11/specs/i18n/Trans.ms new file mode 100644 index 000000000..19c053949 --- /dev/null +++ b/libX11/specs/i18n/Trans.ms @@ -0,0 +1,1148 @@ +.\" $Xorg: Trans.ms,v 1.3 2000/08/17 19:42:49 cpqbld Exp $ +.\" $XdotOrg: xc/doc/specs/i18n/Trans.ms,v 1.2 2004/04/23 18:42:19 eich Exp $ +.\" To print this out, type tbl macros.t This File | troff -ms +.EH '''' +.OH '''' +.EF '''' +.OF '''' +.ps 11 +.nr PS 11 +.\" .nr PD 1v +.\" .nr DD 1v +\& +.sp 8 +.TL +\s+3\fBThe XIM Transport Specification\s-3\fP +.sp +.sp +\fBRevision 0.1\fP +.sp +\fBX Version 11, Release 7\fP +.sp +\fB\*(xV\fP +.sp 3 +.AU +Takashi Fujiwara +.AI +FUJITSU LIMITED +.sp 3 +.AB +.LP +This specification describes the transport layer interfaces between +Xlib and IM Server, which makes various channels usable such as X +protocol or, TCP/IP, DECnet and etc. +.AE +.ce 0 +.br +.LP +.bp +\& +.ps 9 +.nr PS 9 +.sp 8 +.LP +Copyright \(co 1994 by FUJITSU LIMITED +.LP +Permission to use, copy, modify, and distribute this documentation +for any purpose and without fee is hereby granted, provided +that the above copyright notice and this permission +notice appear in all copies. +Fujitsu makes no representations about the suitability +for any purpose of the information in this document. +This documentation is provided as is without express or implied warranty. +.sp 5 +Copyright \(co 1994 X Consortium +.LP +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the ``Software''), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: +.LP +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. +.LP +THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +.LP +Except as contained in this notice, the name of the X Consortium shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from the X Consortium. +.sp 3 +\fIX Window System\fP is a trademark of The Open Group. +.ps 11 +.nr PS 11 +.bp 1 +.EH '\fBXIM Transport Specification\fP''\fB\*(xV\fP' +.OH '\fBXIM Transport Specification\fP''\fB\*(xV\fP' +.EF ''\fB % \fP'' +.OF ''\fB % \fP'' +.NH 1 +Introduction +.XS +\*(SN Introduction +.XE +.LP +The Xlib XIM implementation is layered into three functions, a protocol +layer, an interface layer and a transport layer. The purpose of this +layering is to make the protocol independent of transport implementation. +Each function of these layers are: +.RS 3 +.IP "\fIThe protocol layer\fP" +.br +implements overall function of XIM and calls the interface layer +functions when it needs to communicate to IM Server. +.IP "\fIThe interface layer\fP" +.br +separates the implementation of the transport layer from the protocol +layer, in other words, it provides implementation independent hook for +the transport layer functions. +.IP "\fIThe transport layer\fP" +.br +handles actual data communication with IM Server. It is done by a set +of several functions named transporters. +.RE +.LP +This specification describes the interface layer and the transport +layer, which makes various communication channels usable such as +X protocol or, TCP/IP, DECnet, STREAM, etc., and provides +the information needed for adding another new transport layer. +In addition, sample implementations for the transporter using the +X connection is described in section 4. +.NH 1 +Initialization +.XS +\*(SN Initialization +.XE +.NH 2 +Registering structure to initialize +.XS +\*(SN Registering structure to initialize +.XE +.LP +The structure typed as TransportSW contains the list of the transport +layer the specific implementations supports. +.LP +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef struct { +.br + char *transport_name; +.br + Bool (*config); +} TransportSW; +.De +.LP +.IP "\fItransport_name\fP" 15 +name of transport(*1) +.FS +(*1) Refer to "The Input Method Protocol: Appendix B" +.FE +.IP "\fIconfig\fP" 15 +initial configuration function +.LP +A sample entry for the Xlib supporting transporters is shown below: +.LP +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +TransportSW _XimTransportRec[] = { +.sp 3p +/* char \fI*: +\ * transport_name\fP, Bool \fI(*config)()\fP +\ */ + ``X'', _XimXConf, + ``tcp'', _XimTransConf, + ``local'', _XimTransConf, + ``decnet'', _XimTransConf, + ``streams'', _XimTransConf, + (char *)NULL, (Bool (*)())NULL, +}; +.De +.LP +.NH 2 +Initialization function +.XS +\*(SN Initialization function +.XE +.LP +The following function will be called once when Xlib configures the +transporter functions. +.sp 6p +.FD 0 +Bool (*config)(\fIim\fP, \fItransport_data\fP) +.br + XIM \fIim\fP; +.br + char \fI*transport_data\fP; +.br +.FN +.IP \fIim\fP 1i +Specifies XIM structure address. +.IP \fItransport_data\fP 1i +Specifies the data specific to the transporter, in IM Server address. (*1) +.FS +(*1) Refer to "The Input Method Protocol: Appendix B" +.FE +.sp 6p +.LP +This function must setup the transporter function pointers. +.LP +The actual \fIconfig\fP function will be chosen by IM Server at the +pre-connection time, matching by the \fItransport_name\fP specified +in the \fB_XimTransportRec\fP array; The specific members of XimProto +structure listed below must be initialized so that point they +appropriate transporter functions. +.LP +If the specified transporter has been configured successfully, this +function returns True. There is no Alternative Entry for config +function itself. +.LP +The structure XimProto contains the following function pointers: +.DS +.TA .5i 2.5i +.ta .5i 2.5i +Bool (*connect)(); /* Open connection */ +Bool (*shutdown)(); /* Close connection */ +Bool (*write)(); /* Write data */ +Bool (*read)(); /* Read data */ +Bool (*flush)(); /* Flush data buffer */ +Bool (*register_dispatcher)(); /* Register asynchronous data handler */ +Bool (*call_dispatcher)(); /* Call dispatcher */ +.DE +These functions are called when Xlib needs to communicate the +IM Server. These functions must process the appropriate procedure +described below. +.LP +.NH 1 +The interface/transport layer functions +.XS +\*(SN The interface/transport layer functions +.XE +.LP +Following functions are used for the transport interface. +.LP +.ce +Table 3-1; The Transport Layer Functions. +.SM +.TS +tab(:) center box; +cw(4c) | cw(4c) | c +c | c | c +l | l | c. +.B +Alternative Entry:XimProto member:Section +(Interface Layer):(Transport Layer):\^ += +.R +\fB_XimConnect\fP:connect:3.1 +_ +\fB_XimShutdown\fP:shutdown:3.2 +_ +\fB_XimWrite\fP:write:3.3 +_ +\fB_XimRead\fP:read:3.4 +_ +\fB_XimFlush\fP:flush:3.5 +_ +\fB_XimRegisterDispatcher\fP:register_dispatcher:3.6 +_ +\fB_XimCallDispatcher\fP:call_dispatcher:3.7 +.TE +.NL +.LP +The Protocol layer calls the above functions using the Alternative +Entry in the left column. The transport implementation defines +XimProto member function in the right column. The Alternative Entry is +provided so as to make easier to implement the Protocol Layer. +.LP +.NH 2 +Opening connection +.XS +\*(SN Opening connection +.XE +.LP +When \fBXOpenIM\fP is called, the following function is called to connect +with the IM Server. +.sp 6p +.FD 0 +Bool (*connect)(\fIim\fP) +.br + XIM \fIim\fP; +.FN +.IP \fIim\fP 1i +Specifies XIM structure address. +.sp 6p +.LP +This function must establishes the connection to the IM Server. If the +connection is established successfully, this function returns True. +The Alternative Entry for this function is: +.sp 6p +.FD 0 +Bool _XimConnect(\fIim\fP) +.br + XIM \fIim\fP; +.FN +.IP \fIim\fP 1i +Specifies XIM structure address. +.LP +.NH 2 +Closing connection +.XS +\*(SN Closing connection +.XE +.LP +When \fBXCloseIM\fP is called, the following function is called to +disconnect the connection with the IM Server. The Alternative Entry +for this function is: +.sp 6p +.FD 0 +Bool (*shutdown)(\fIim\fP) +.br + XIM \fIim\fP; +.FN +.IP \fIim\fP 1i +Specifies XIM structure address. +.sp 6p +.LP +This function must close connection with the IM Server. If the +connection is closed successfully, this function returns True. The +Alternative Entry for this function is: +.sp 6p +.FD 0 +Bool _XimShutdown(\fIim\fP) +.br + XIM \fIim\fP; +.FN +.IP \fIim\fP +Specifies XIM structure address. +.LP +.NH 2 +Writing data +.XS +\*(SN Writing data +.XE +.LP +The following function is called, when Xlib needs to write data to the +IM Server. +.sp 6p +.FD 0 +Bool (*write)(\fIim\fP, \fIlen\fP, \fIdata\fP) +.br + XIM \fIim\fP; +.br + INT16 \fIlen\fP; +.br + XPointer \fIdata\fP; +.FN +.IP \fIim\fP 1i +Specifies XIM structure address. +.IP \fIlen\fP 1i +Specifies the length of writing data. +.IP \fIdata\fP 1i +Specifies the writing data. +.sp 6p +.LP +This function writes the \fIdata\fP to the IM Server, regardless +of the contents. The number of bytes is passed to \fIlen\fP. The +writing data is passed to \fIdata\fP. If data is sent successfully, +the function returns True. Refer to "The Input Method Protocol" for +the contents of the writing data. The Alternative Entry for this +function is: +.sp 6p +.FD 0 +Bool _XimWrite(\fIim\fP, \fIlen\fP, \fIdata\fP) +.br + XIM \fIim\fP; +.br + INT16 \fIlen\fP; +.br + XPointer \fIdata\fP; +.FN +.IP \fIim\fP 1i +Specifies XIM structure address. +.IP \fIlen\fP 1i +Specifies the length of writing data. +.IP \fIdata\fP 1i +Specifies the writing data. +.LP +.NH 2 +Reading data +.XS +\*(SN Reading data +.XE +.LP +The following function is called when Xlib waits for response from IM +server synchronously. +.sp 6p +.FD 0 +Bool (*read)(\fIim\fP, \fIread_buf\fP, \fIbuf_len\fP, \fIret_len\fP) +.br + XIM \fIim\fP; +.br + XPointer \fIread_buf\fP; +.br + int \fIbuf_len\fP; +.br + int \fI*ret_len\fP; +.FN +.IP \fIim\fP 1i +Specifies XIM structure address. +.IP \fIread_buf\fP 1i +Specifies the buffer to store data. +.IP \fIbuf_len\fP 1i +Specifies the size of the \fIbuffer\fP +.IP \fIret_len\fP +Specifies the length of stored data. +.sp 6p +.LP +This function stores the read data in \fIread_buf\fP, which size is +specified as \fIbuf_len\fP. The size of data is set to \fIret_len\fP. +This function return True, if the data is read normally or reading +data is completed. +.LP +The Alternative Entry for this function is: +.sp 6p +.FD 0 +Bool _XimRead(\fIim\fP, \fIret_len\fP, \fIbuf\fP, \fIbuf_len\fP, \fIpredicate\fP, \fIpredicate_arg\fP) +.br + XIM \fIim\fP; +.br + INT16 \fI*ret_len\fP; +.br + XPointer \fIbuf\fP; +.br + int \fIbuf_len\fP; +.br + Bool \fI(*predicate)()\fP; +.br + XPointer \fIpredicate_arg\fP; +.FN +.IP \fIim\fP 1i +Specifies XIM structure address. +.IP \fIret_len\fP 1i +Specifies the size of the \fIdata\fP buffer. +.IP \fIbuf\fP 1i +Specifies the buffer to store data. +.IP \fIbuf_len\fP 1i +Specifies the length of \fIbuffer\fP. +.IP \fIpredicate\fP 1i +Specifies the predicate for the XIM data. +.IP \fIpredicate_arg\fP 1i +Specifies the predicate specific data. +.sp 6p +.LP +The predicate procedure indicates whether the \fIdata\fP is for the +XIM or not. \fIlen\fP +This function stores the read data in \fIbuf\fP, which size is specified +as \fIbuf_len\fP. The size of data is set to \fIret_len\fP. +If \fIpreedicate()\fP returns True, this function returns True. +If not, it calls the registered callback function. +.LP +The procedure and its arguments are: +.LP +.sp 6p +.FD 0 +Bool (*predicate)(\fIim\fP, \fIlen\fP, \fIdata\fP, \fIpredicate_arg\fP) +.br + XIM \fIim\fP; +.br + INT16 \fIlen\fP; +.br + XPointer \fIdata\fP; +.br + XPointer \fIpredicate_arg\fP; +.FN +.IP \fIim\fP 1i +Specifies XIM structure address. +.IP \fIlen\fP 1i +Specifies the size of the \fIdata\fP buffer. +.IP \fIdata\fP 1i +Specifies the buffer to store data. +.IP \fIpredicate_arg\fP 1i +Specifies the predicate specific data. +.LP +.NH 2 +Flushing buffer +.XS +\*(SN Flushing buffer +.XE +.LP +The following function is called when Xlib needs to flush the data. +.sp 6p +.FD 0 +void (*flush)(\fIim\fP) +.br + XIM \fIim\fP; +.FN +.IP \fIim\fP 1i +Specifies XIM structure address. +.sp 6p +.LP +This function must flush the data stored in internal buffer on the +transport layer. If data transfer is completed, the function returns +True. The Alternative Entry for this function is: +.sp 6p +.FD 0 +void _XimFlush(\fIim\fP) +.br + XIM \fIim\fP; +.FN +.IP \fIim\fP 1i +Specifies XIM structure address. +.LP +.NH 2 +Registering asynchronous data handler +.XS +\*(SN Registering asynchronous data handler +.XE +.LP +Xlib needs to handle asynchronous response from IM Server. This is +because some of the XIM data occur asynchronously to X events. +.LP +Those data will be handled in the \fIFilter\fP, and the \fIFilter\fP +will call asynchronous data handler in the protocol layer. Then it +calls dispatchers in the transport layer. The dispatchers are +implemented by the protocol layer. This function must store the +information and prepare for later call of the dispatchers using +\fB_XimCallDispatcher\fP. +.LP +When multiple dispatchers are registered, they will be called +sequentially in order of registration, on arrival of asynchronous +data. The register_dispatcher is declared as following: +.sp 6p +.FD 0 +Bool (*register_dispatcher)(\fIim\fP, \fIdispatcher\fP, \fIcall_data\fP) +.br + XIM \fIim\fP; +.br + Bool \fI(*dispatcher)()\fP; +.br + XPointer \fIcall_data\fP; +.FN +.IP \fIim\fP 1i +Specifies XIM structure address. +.IP \fIdispatcher\fP 1i +Specifies the dispatcher function to register. +.IP \fIcall_data\fP 1i +Specifies a parameter for the \fIdispatcher\fP. +.LP +The dispatcher is a function of the following type: +.sp 6p +.FD 0 +Bool (*dispatcher)(\fIim\fP, \fIlen\fP, \fIdata\fP, \fIcall_data\fP) +.br + XIM \fIim\fP; +.br + INT16 \fIlen\fP; +.br + XPointer \fIdata\fP; +.br + XPointer \fIcall_data\fP; +.FN +.IP \fIim\fP 1i +Specifies XIM structure address. +.IP \fIlen\fP 1i +Specifies the size of the \fIdata\fP buffer. +.IP \fIdata\fP 1i +Specifies the buffer to store data. +.IP \fIcall_data\fP 1i +Specifies a parameter passed to the register_dispatcher. +.sp 6p +.LP +The dispatcher is provided by the protocol layer. They are called once +for every asynchronous data, in order of registration. If the data is +used, it must return True. otherwise, it must return False. +.LP +If the dispatcher function returns True, the Transport Layer assume +that the data has been processed by the upper layer. The Alternative +Entry for this function is: +.sp 6p +.FD 0 +Bool _XimRegisterDispatcher(\fIim\fP, \fIdispatcher\fP, \fIcall_data\fP) +.br + XIM \fIim\fP; +.br + Bool \fI(*dispatcher)()\fP; +.br + XPointer \fIcall_data\fP; +.FN +.IP \fIim\fP 1i +Specifies XIM structure address. +.IP \fIdispatcher\fP 1i +Specifies the dispatcher function to register. +.IP \fIcall_data\fP 1i +Specifies a parameter for the \fIdispatcher\fP. +.LP +.NH 2 +Calling dispatcher +.XS +\*(SN Calling dispatcher +.XE +.LP +The following function is used to call the registered dispatcher +function, when the asynchronous response from IM Server has arrived. +.sp 6p +.FD 0 +Bool (*call_dispatcher)(\fIim\fP, \fIlen\fP, \fIdata\fP) +.br + XIM \fIim\fP; +.br + INT16 \fIlen\fP; +.br + XPointer \fIdata\fP; +.FN +.IP \fIim\fP 1i +Specifies XIM structure address. +.IP \fIlen\fP 1i +Specifies the size of \fIdata\fP buffer. +.IP \fIdata\fP 1i +Specifies the buffer to store data. +.LP +The call_dispatcher must call the dispatcher function, in order of +their registration. \fIlen\fP and \fIdata\fP are the data passed to +register_dispatcher. +.LP +The return values are checked at each invocation, and if it finds +True, it immediately return with true for its return value. +.LP +It is depend on the upper layer whether the read data is XIM +Protocol packet unit or not. +The Alternative Entry for this function is: +.sp 6p +.FD 0 +Bool _XimCallDispatcher(\fIim\fP, \fIlen\fP, \fIdata\fP) +.br + XIM \fIim\fP; +.br + INT16 \fIlen\fP; +.br + XPointer \fIcall_data\fP; +.FN +.LP +.bp +.NH 1 +Sample implementations for the Transport Layer +.XS +\*(SN Sample implementations for the Transport Layer +.XE +.LP +Sample implementations for the transporter using the X connection is +described here. +.LP +.NH 2 +X Transport +.XS +\*(SN X Transport +.XE +.LP +At the beginning of the X Transport connection for the XIM transport +mechanism, two different windows must be created either in an Xlib XIM +or in an IM Server, with which the Xlib and the IM Server exchange the +XIM transports by using the ClientMessage events and Window Properties. +In the following, the window created by the Xlib is referred as the +"client communication window", and on the other hand, the window created +by the IM Server is referred as the "IMS communication window". +.LP +.NH 3 +Connection +.XS +\*(SN X Connection +.XE +.LP +In order to establish a connection, a communication window is created. +A ClientMessage in the following event's format is sent to the owner +window of XIM_SERVER selection, which the IM Server has created. +.LP +Refer to "The Input Method Protocol" for the XIM_SERVER atom. +.LP +.ce +Table 4-1; The ClientMessage sent to the IMS window. +.TS H +tab(:); +l s|l +l l|l. +_ +.sp 6p +.B +Structure Member:Contents +.sp 6p +_ +.sp 6p +.TH +.R +int:type:ClientMessage +u_long:serial:Set by the X Window System +Bool:send_event:Set by the X Window System +Display:*display:The display to which connects +Window:window:IMS Window ID +Atom:message_type:XInternAtom(display, ``_XIM_XCONNECT'', False) +int:format:32 +long:data.l[0]:client communication window ID +long:data.l[1]:client-major-transport-version (*1) +long:data.l[2]:client-major-transport-version (*1) +.sp 6p +_ +.TE +.LP +In order to establish the connection (to notify the IM Server communication +window), the IM Server sends a ClientMessage in the following event's +format to the client communication window. +.LP +.ce +Table 4-2; The ClientMessage sent by IM Server. +.TS H +tab(:); +l s | l +l l | l. +_ +.sp 6p +.B +Structure Member:Contents +.sp 6p +_ +.sp 6p +.TH +.R +int:type:ClientMessage +u_long:serial:Set by the X Window System +Bool:send_event:Set by the X Window System +Display:*display:The display to which connects +Window:window:client communication window ID +Atom:message_type:XInternAtom(display, ``_XIM_XCONNECT'', False) +int:format:32 +long:data.l[0]:IMS communication window ID +long:data.l[1]:server-major-transport-version (*1) +long:data.l[2]:server-minor-transport-version (*1) +long:data.l[3]:dividing size between ClientMessage and Property (*2) +.sp 6p +_ +.TE +.LP +.IP (*1) +major/minor-transport-version +.RS +The read/write method is decided by the combination of +major/minor-transport-version, as follows: +.LP +.ce +Table 4-3; The read/write method and the major/minor-transport-version +.TS +center, tab(:); +| c s | l | +| c | c | l |. +_ +.sp 6p +.B +Transport-version:read/write +.sp 6p +_ +.sp 6p +major:minor: +.sp 6p +_ +.sp 6p +.R +0:0:only-CM & Property-with-CM +:1:only-CM & multi-CM +:2:only-CM & multi-CM & Property-with-CM +.sp 6p +_ +.sp 6p +1:0:PropertyNotify +.sp 6p +_ +.sp 6p +2:0:only-CM & PropertyNotify +:1:only-CM & multi-CM & PropertyNotify +.sp 6p +_ +.TE +.LP +.RS +.TS +center, tab(;); +l n l. +only-CM;:;data is sent via a ClientMessage +multi-CM;:;data is sent via multiple ClientMessages +Property-with-CM;:;T{ +data is written in Property, and its Atom is send via ClientMessage +T} +PropertyNotify;:;T{ +data is written in Property, and its Atom is send via PropertyNotify +T} +.TE +.RE +.LP +The method to decide major/minor-transport-version is as follows: +.LP +.IP (1) +The client sends 0 as major/minor-transport-version to the IM Server. +The client must support all methods in Table 4-3. +The client may send another number as major/minor-transport-version to +use other method than the above in the future. +.IP (2) +The IM Server sends its major/minor-transport-version number to +the client. The client sends data using the method specified by the +IM Server. +.IP (3) +If major/minor-transport-version number is not available, it is regarded +as 0. +.RE +.LP +.IP (*2) +dividing size between ClientMessage and Property +.RS +If data is sent via both of multi-CM and Property, specify the dividing +size between ClientMessage and Property. The data, which is smaller than +this size, is sent via multi-CM (or only-CM), and the data, which is +lager than this size, is sent via Property. +.RE +.LP +.NH 3 +read/write +.XS +\*(SN read/write +.XE +.LP +The data is transferred via either ClientMessage or Window Property in +the X Window System. +.LP +.NH 4 +Format for the data from the Client to the IM Server +.XS +\*(SN Format for the data from the Client to the IM Server +.XE +.LP +.B +ClientMessage +.LP +.RS +If data is sent via ClientMessage event, the format is as follows: +.LP +.ce +Table 4-4; The ClientMessage event's format (first or middle) +.TS H +tab(;); +l s | l +l l | l. +_ +.sp 6p +.B +Structure Member;Contents +.sp 6p +_ +.sp 6p +.TH +.R +int;type;ClientMessage +u_long;serial;Set by the X Window System +Bool;send_event;Set by the X Window System +Display;*display;The display to which connects +Window;window;IMS communication window ID +Atom;message_type;XInternAtom(display, ``_XIM_MOREDATA'', False) +int;format;8 +char;data.b[20];(read/write DATA : 20 byte) +.sp 6p +_ +.TE +.LP +.ce +Table 4-5; The ClientMessage event's format (only or last) +.TS H +tab(;); +l s | l +l l | l. +_ +.sp 6p +.B +Structure Member;Contents +.sp 6p +_ +.sp 6p +.TH +.R +int;type;ClientMessage +u_long;serial;Set by the X Window System +Bool;send_event;Set by the X Window System +Display;*display;The display to which connects +Window;window;IMS communication window ID +Atom;message_type;XInternAtom(display, ``_XIM_PROTOCOL'', False) +int;format;8 +char;data.b[20];(read/write DATA : MAX 20 byte) (*1) +.sp 6p +_ +.TE +.IP (*1) +If the data is smaller than 20 byte, all data other than available data +must be 0. +.RE +.LP +.B +Property +.LP +.RS +In the case of large data, data will be sent via the Window Property +for the efficiency. There are the following two methods to notify +Property, and transport-version is decided which method is used. +.LP +.IP (1) +The XChangeProperty function is used to store data in the client +communication window, and Atom of the stored data is notified to the +IM Server via ClientMessage event. +.IP (2) +The XChangeProperty function is used to store data in the client +communication window, and Atom of the stored data is notified to the +IM Server via PropertyNotify event. +.LP +The arguments of the XChangeProperty are as follows: +.LP +.ce +Table 4-6; The XChangeProperty event's format +.TS H +tab(:); +l s | l +l l | l. +_ +.sp 6p +.B +Argument:Contents +.sp 6p +_ +.sp 6p +.TH +.R +Display:*display:The display to which connects +Window:window:IMS communication window ID +Atom:property:read/write property Atom (*1) +Atom:type:XA_STRING +int:format:8 +int:mode:PropModeAppend +u_char:*data:read/write DATA +int:nelements:length of DATA +.sp 6p +_ +.TE +.LP +.IP (*1) +The read/write property ATOM allocates the following strings by +\fBXInternAtom\fP. +.RS +``_clientXXX'' +.RE +.LP +The client changes the property with the mode of PropModeAppend and +the IM Server will read it with the delete mode i.e. (delete = True). +.LP +If Atom is notified via ClientMessage event, the format of the ClientMessage +is as follows: +.LP +.ce +Table 4-7; The ClientMessage event's format to send Atom of property +.TS H +tab(:); +l s | l +l l | l. +_ +.sp 6p +.B +Structure Member:Contents +.sp 6p +_ +.sp 6p +.TH +.R +int:type:ClientMessage +u_long:serial:Set by the X Window System +Bool:send_event:Set by the X Window System +Display:*display:The display to which connects +Window:window:IMS communication window ID +Atom:message_type:XInternAtom(display, ``_XIM_PROTOCOL'', False) +int:format:32 +long:data.l[0]:length of read/write property Atom +long:data.l[1]:read/write property Atom +.sp 6p +_ +.TE +.RE +.LP +.NH 4 +Format for the data from the IM Server to the Client +.XS +\*(SN Format for the data from the Client to the Client +.XE +.LP +.B +ClientMessage +.LP +.RS +The format of the ClientMessage is as follows: +.LP +.ce +Table 4-8; The ClientMessage event's format (first or middle) +.TS H +tab(;); +l s | l +l l | l. +_ +.sp 6p +.B +Structure Member;Contents +.sp 6p +_ +.sp 6p +.TH +.R +int;type;ClientMessage +u_long;serial;Set by the X Window System +Bool;send_event ;Set by the X Window System +Display;*display;The display to which connects +Window;window;client communication window ID +Atom;message_type;XInternAtom(display, ``_XIM_MOREDATA'', False) +int;format;8 +char;data.b[20];(read/write DATA : 20 byte) +.sp 6p +_ +.TE +.LP +.ce +Table 4-9; The ClientMessage event's format (only or last) +.TS H +tab(;); +l s | l +l l | l. +_ +.sp 6p +.B +Structure Member;Contents +.sp 6p +_ +.sp 6p +.TH +.R +int;type;ClientMessage +u_long;serial;Set by the X Window System +Bool;send_event ;Set by the X Window System +Display;*display;The display to which connects +Window;window;client communication window ID +Atom;message_type;XInternAtom(display, ``_XIM_PROTOCOL'', False) +int;format;8 +char;data.b[20];(read/write DATA : MAX 20 byte) (*1) +.sp 6p +_ +.TE +.LP +.IP (*1) +If the data size is smaller than 20 bytes, all data other than available +data must be 0. +.RE +.LP +.B +Property +.LP +.RS +In the case of large data, data will be sent via the Window Property +for the efficiency. There are the following two methods to notify +Property, and transport-version is decided which method is used. +.LP +.IP (1) +The XChangeProperty function is used to store data in the IMS +communication window, and Atom of the property is sent via the +ClientMessage event. +.IP (2) +The XChangeProperty function is used to store data in the IMS +communication window, and Atom of the property is sent via +PropertyNotify event. +.LP +The arguments of the XChangeProperty are as follows: +.LP +.ce +Table 4-10; The XChangeProperty event's format +.TS H +tab(:); +l s | l +l l | l. +_ +.sp 6p +.B +Argument:Contents +.sp 6p +_ +.sp 6p +.TH +.R +Display:*display:The display which to connects +Window:window:client communication window ID +Atom:property:read/write property Atom (*1) +Atom:type:XA_STRING +int:format:8 +int:mode:PropModeAppend +u_char:*data:read/write DATA +int:nelements:length of DATA +.sp 6p +_ +.TE +.LP +.IP (*1) +The read/write property ATOM allocates some strings, which are not +allocated by the client, by \fBXInternAtom\fP. +.LP +The IM Server changes the property with the mode of PropModeAppend and +the client reads it with the delete mode, i.e. (delete = True). +.LP +If Atom is notified via ClientMessage event, the format of the ClientMessage +is as follows: +.LP +.ce +Table 4-11; The ClientMessage event's format to send Atom of property +.TS H +tab(:); +l s | l +l l | l. +_ +.sp 6p +.B +Structure Member:Contents +.sp 6p +_ +.sp 6p +.TH +.R +int:type:ClientMessage +u_long:serial:Set by the X Window System +Bool:send_event:Set by the X Window System +Display:*display:The display to which connects +Window:window:client communication window ID +Atom:message_type:XInternAtom(display, ``_XIM_PROTOCOL'', False) +int:format:32 +long:data.l[0]:length of read/write property ATOM +long:data.l[1]:read/write property ATOM +.sp 6p +_ +.TE +.RE +.LP +.NH 3 +Closing Connection +.XS +\*(SN Closing Connection +.XE +.LP +If the client disconnect with the IM Server, shutdown function should +free the communication window properties and etc.. +.LP +.NH 1 +References +.XS +\*(SN References +.XE +.LP +[1] Masahiko Narita and Hideki Hiura, \fI``The Input Method Protocol''\fP +.LP + |