aboutsummaryrefslogtreecommitdiff
path: root/libX11/specs/XIM/xim.ms
diff options
context:
space:
mode:
Diffstat (limited to 'libX11/specs/XIM/xim.ms')
-rw-r--r--libX11/specs/XIM/xim.ms4299
1 files changed, 0 insertions, 4299 deletions
diff --git a/libX11/specs/XIM/xim.ms b/libX11/specs/XIM/xim.ms
deleted file mode 100644
index 08bf637b4..000000000
--- a/libX11/specs/XIM/xim.ms
+++ /dev/null
@@ -1,4299 +0,0 @@
-.\" To print this out, type tbl macros.t ThisFile | troff -ms
-.EH ''''
-.OH ''''
-.EF ''''
-.OF ''''
-.ps 11
-.nr PS 11
-\&
-.sp 8
-.TL
-\s+3\fBThe Input Method Protocol\fP\s-3
-.sp
-\fBVersion 1.0\fP
-.sp
-\fBX Consortium Standard\fP
-.sp
-\fBX Version 11, Release 7\fP
-.sp
-\fB\*(xV\fP
-.sp 3
-.AU
-Masahiko Narita
-.AI
-FUJITSU Limited.
-.AU
-Hideki Hiura
-.AI
-SunSoft, Inc.
-.sp 3
-.AB
-.LP
-This specifies a protocol between IM library and IM (Input Method)
-Server for internationalized text input, which is independent from
-any specific language, any specific input method and the transport layer
-used in communication between the IM library and the IM Server, and uses
-a client-server model.
-This protocol allows user to use his/her favorite input method for all
-applications within the stand-alone distributed environment.
-.AE
-.ce 0
-.br
-\&
-.LP
-.ps 11
-.nr PS 11
-.bp
-\&
-.ps 9
-.nr PS 9
-.sp 8
-.LP
-.DS C
-X Window System is a trademark of X Consortium, Inc.
-.sp
-Copyright \(co 1993, 1994 by X Consortium, Inc.
-.DE
-.sp 2
-.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
-.DS C
-Copyright \(co 1993, 1994 by FUJITSU LIMITED
-.DE
-.sp 2
-.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 and Sun Microsystems make no representations
-about the suitability for any purpose of the information in this document.
-This documentation is provided as is without express or implied warranty.
-.sp 3
-.DS C
-Copyright \(co 1993, 1994 by Sun Microsystems, Inc.
-.DE
-.sp 2
-.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 (including the next
-paragraph) 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 AUTHORS OR COPYRIGHT HOLDERS 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.
-.ps 11
-.nr PS 11
-.bp 1
-.EH '\fBX Input Method Protocol\fP''\fB\*(xV\fP'
-.OH '\fBX Input Method Protocol\fP''\fB\*(xV\fP'
-.EF ''\fB % \fP''
-.OF ''\fB % \fP''
-.NH 1
-Introduction
-.XS
-\*(SN Introduction
-.XE
-.NH 2
-Scope
-.XS
-\*(SN Scope
-.XE
-.LP
-The internationalization in the
-X Window System
-Version 11, Release 5 (X11R5) provides a common API which application
-developers can use to create portable internationalized programs and to
-adapt them to the requirements of different native languages, local customs,
-and character string encodings (this is called ``localization'').
-As one of its internationalization mechanisms X11R5 has defined a functional
-interface for internationalized text input, called XIM (X Input Method).
-.LP
-When a client-server model is used with an IM (Input Method) implementation,
-a protocol must be established between the client and the server.
-However, the protocol used to interface Input Method Servers (IM Servers)
-with the Input Method libraries (IM libraries) to which applications are
-linked was not addressed in X11R5.
-This led application developers to depend on vendor-specific input methods,
-decreased the user's choice of available input methods, and made it more
-difficult for developers to create portable applications. This paper describes
-the Input Method Protocol developed for X11R6 to resolve the above problems
-and to address the requirements of existing and future input methods.
-.LP
-The Input Method Protocol is independent from the transport layer used in
-communication between the IM library and the IM Server.
-Thus, the input method protocol can be built on any inter-process
-communication mechanism, such as TCP/IP or the X protocol.
-.LP
-In addition, the protocol provides for future extensions such as differing
-input model types.
-.LP
-.NH 2
-Background
-.XS
-\*(SN Background
-.XE
-.LP
-Text input is much more simple for some languages than
-others. English, for instance, uses an alphabet of a manageable size,
-and input consists of pressing the corresponding key on a keyboard,
-perhaps in combination with a shift key for capital letters or special
-characters.
-.LP
-Some languages have larger alphabets, or modifiers such as accents,
-which require the addition of special key combinations in order to enter
-text. These input methods may require ``dead-keys'' or ``compose-keys''
-which, when followed by different combinations of key strokes,
-generate different characters.
-.LP
-Text input for ideographic languages is much less simple. In these
-languages, characters represent actual objects rather than phonetic
-sounds used in pronouncing a word, and the number of characters
-in these languages may continue to grow. In Japanese, for instance, most
-text input methods involve entering characters in a phonetic alphabet,
-after which the input method searches a dictionary for possible
-ideographic equivalents (of which there may be many). The input method then
-presents the candidate characters for the user to choose from.
-.LP
-In Japanese, either Kana (phonetic symbols) or Roman letters are
-typed and then a region is selected for conversion to Kanji. Several
-Kanji characters may have the same phonetic representation. If that
-is the case with the string entered, a menu of characters is presented
-and the user must choose the appropriate one. If no choice is necessary
-or a preference has been established, the input method does the
-substitution directly.
-.LP
-These complicated input methods must present state information (Status Area),
-text entry and edit space (Preedit Area), and menu/choice presentations
-(Auxiliary Area). Much of the protocol between the IM library and the IM
-Server involves managing these IM areas.
-Because of the size and complexity of these input methods, and because
-of how widely they vary from one language or locale to another, they are
-usually implemented as separate processes which can serve many client
-processes on the same computer or network.
-.LP
-.NH 2
-Input Method Styles
-.XS
-\*(SN Input Method Styles
-.XE
-.LP
-X11 internationalization support includes the following four types of
-input method:
-.RS
-.IP "- on-the-spot:" 20
-The client application is directed by the IM Server to display all
-pre-edit data at the site of text insertion. The client registers
-callbacks invoked by the input method during pre-editing.
-.IP "- off-the-spot:" 20
-The client application provides display windows for the pre-edit data
-to the input method which displays into them directly.
-.IP "- over-the-spot:" 20
-The input method displays pre-edit data in a window which it brings up
-directly over the text insertion position.
-.IP "- root-window:" 20
-The input method displays all pre-edit data in a separate area of the
-screen in a window specific to the input method.
-.RE
-.LP
-Client applications must choose from the available input methods
-supported by the IM Server and provide the display areas and callbacks
-required by the input method.
-.LP
-.NH 1
-Architecture
-.XS
-\*(SN Architecture
-.XE
-.NH 2
-Implementation Model
-.XS
-\*(SN Implementation Model
-.XE
-.LP
-Within the X Window System environment, the following two typical
-architectural models can be used as an input method's implementation
-model.
-.RS
-.IP "- Client/Server model:" 20
-A separate process, the IM Server, processes input and handles preediting,
-converting, and committing. The IM library within the application, acting
-as client to the IM Server, simply receives the committed string from the
-IM Server.
-.IP "- Library model:" 20
-All input is handled by the IM library within the application. The
-event process is closed within the IM library and a separate IM Server
-process may not be required.
-.RE
-.LP
-Most languages which need complex preediting, such as Asian languages,
-are implemented using the Client/Server IM model. Other languages
-which need only dead key or compose key processing, such as European
-languages, are implemented using the Library model.
-.LP
-In this paper, we discuss mainly the Client/Server IM model and the
-protocol used in communication between the IM library (client) and the IM
-Server.
-.LP
-.NH 2
-Structure of IM
-.XS
-\*(SN Structure of IM
-.XE
-.LP
-When the client connects or disconnects to the IM Server, an open or close
-operation occurs between the client and the IM Server.
-.LP
-The IM can be specified at the time of XOpenIM() by setting the locale
-of the client and a locale modifier. Since the IM remembers
-the locale at the time of creation XOpenIM() can be called
-multiple times (with the
-setting for the locale and the locale modifier changed) to support
-multiple languages.
-.LP
-In addition, the supported IM type can be obtained using XGetIMValues().
-.LP
-The client usually holds multiple input (text) fields. Xlib provides a
-value type called the ``Input Context'' (IC) to manage each individual
-input field. An IC can be created by specifying XIM using XCreateIC(),
-and it can be destroyed using XDestroyIC().
-.LP
-The IC can specify the type of IM which is supported by XIM for each
-input field, so each input field can handle a different type of IM.
-.LP
-Most importantly information such as the committed string sent from
-the IM Server to the client, is exchanged based on each IC.
-.LP
-Since each IC corresponds to an input field, the focused input field
-should be announced to the IM Server using XSetICFocus(). (XUnsetICFocus()
-can also be used to change the focus.)
-.LP
-.NH 2
-Event Handling Model
-.XS
-\*(SN Event Handling Model
-.XE
-.LP
-Existing input methods support either the FrontEnd method, the BackEnd method,
-or both. This protocol specifically supports the BackEnd method as
-the default method, but also supports the FrontEnd method as an optional
-IM Server extension.
-.LP
-The difference between the FrontEnd and BackEnd methods is in how
-events are delivered to the IM Server. (Fig. 1)
-.LP
-.NH 3
-BackEnd Method
-.XS
-\*(SN BackEnd Method
-.XE
-.LP
-In the BackEnd method, client window input events are always delivered
-to the IM library, which then passes them to the IM Server. Events are
-handled serially in the order delivered, and therefore there is no
-synchronization problem between the IM library and the IM Server.
-.LP
-Using this method, the IM library forwards all KeyPress and KeyRelease
-events to the IM Server (as required by the Event Flow Control model
-described in section 2.4. ``Event Flow Control''), and synchronizes
-with the IM Server (as described in section 4.16. ``Filtering Events'').
-.LP
-.NH 3
-FrontEnd Method
-.XS
-\*(SN FrontEnd Method
-.XE
-.LP
-In the FrontEnd method, client window input events are delivered by the
-X server directly to both the IM Server and the IM library. Therefore this
-method provides much better interactive performance while preediting
-(particularly in cases such as when the IM Server is running locally on
-the user's workstation and the client application is running on another
-workstation over a relatively slow network).
-.LP
-However, the FrontEnd model may have synchronization problems between
-the key events handled in the IM Server and other events handled in the
-client, and these problems could possibly cause the loss or duplication
-of key events. For this reason, the BackEnd method is the core method
-supported, and the FrontEnd method is made available as an extension for
-performance purposes. (Refer to Appendix A for more information.)
-.LP
-.LP
-.bp
-\^... 0.05 6.513 4.737 10.45
-\^... 0.000i 3.937i 4.687i 0.000i
-.nr 00 \n(.u
-.nf
-.PS 3.937i 4.687i
-.br
-.ps
-.ps 10
-\h'3.687i'\v'3.437i'\v'-.13m'\L'-0.500i\(br'\v'.13m'
-.sp -1
-\h'3.712i'\v'3.037i'\D'l-0.025i -0.100i'
-.sp -1
-\h'3.687i'\v'2.937i'\D'l-0.025i 0.100i'
-.sp -1
-\h'2.187i'\v'1.938i'\v'-.13m'\L'-0.750i\(br'\v'.13m'
-.sp -1
-\h'2.187i'\v'1.188i'\l'0.750i'
-.sp -1
-\h'2.937i'\v'1.188i'\v'-.13m'\L'1.250i\(br'\v'.13m'
-.sp -1
-\h'2.912i'\v'2.338i'\D'l0.025i 0.100i'
-.sp -1
-\h'2.937i'\v'2.438i'\D'l0.025i -0.100i'
-.sp -1
-\h'2.187i'\v'3.437i'\v'-.13m'\L'-1.499i\(br'\v'.13m'
-.sp -1
-\h'2.212i'\v'2.038i'\D'l-0.025i -0.100i'
-.sp -1
-\h'2.187i'\v'1.938i'\D'l-0.025i 0.100i'
-.sp -1
-\h'1.938i'\v'3.437i'\l'1.999i'
-.sp -1
-\h'3.937i'\v'3.437i'\v'-.13m'\L'0.500i\(br'\v'.13m'
-.sp -1
-\h'3.937i'\v'3.937i'\l'-1.999i'
-.sp -1
-\h'1.938i'\v'3.937i'\v'-.13m'\L'-0.500i\(br'\v'.13m'
-.sp -1
-\h'2.562i'\v'2.438i'\l'2.125i'
-.sp -1
-\h'4.687i'\v'2.438i'\v'-.13m'\L'0.499i\(br'\v'.13m'
-.sp -1
-\h'4.687i'\v'2.937i'\l'-2.125i'
-.sp -1
-\h'2.562i'\v'2.937i'\v'-.13m'\L'-0.499i\(br'\v'.13m'
-.sp -1
-\h'2.562i'\v'1.438i'\l'1.313i'
-.sp -1
-\h'3.875i'\v'1.438i'\v'-.13m'\L'0.437i\(br'\v'.13m'
-.sp -1
-\h'3.875i'\v'1.875i'\l'-1.313i'
-.sp -1
-\h'2.562i'\v'1.875i'\v'-.13m'\L'-0.437i\(br'\v'.13m'
-.sp -1
-\h'1.938i'\v'0.438i'\l'1.999i'
-.sp -1
-\h'3.937i'\v'0.438i'\v'-.13m'\L'1.500i\(br'\v'.13m'
-.sp -1
-\h'3.937i'\v'1.938i'\l'-1.999i'
-.sp -1
-\h'1.938i'\v'1.938i'\v'-.13m'\L'-1.500i\(br'\v'.13m'
-.sp -1
-\D'l0.000i 0.000i'
-.sp -1
-.ps
-.ps 12
-\h'3.812i'\v'3.217i'\h'-0.0m'\v'0.2m'FrontEnd Method (Extension)
-.sp -1
-\h'0.813i'\v'3.217i'\h'-0.0m'\v'0.2m'BackEnd Method (Core)
-.sp -1
-\h'2.562i'\v'3.779i'\h'-0.0m'\v'0.2m'X Server
-.sp -1
-\h'3.062i'\v'2.779i'\h'-0.0m'\v'0.2m'IM Server
-.sp -1
-\h'3.062i'\v'1.717i'\h'-0.0m'\v'0.2m'Library
-.sp -1
-\h'2.187i'\v'0.904i'\h'-0.0m'\v'0.2m'Application
-.sp -1
-.ps
-.ft
-.sp 1+3.937i
-.PE
-.if \n(00 .fi
-.ce
-.sp
-Fig.1 The Flow of Events
-.LP
-.NH 2
-Event Flow Control
-.XS
-\*(SN Event Flow Control
-.XE
-.LP
-This protocol supports two event flow models for communication between the
-IM library and the IM Server (Static and Dynamic).
-.LP
-Static Event Flow requires that input events always be sent to the IM
-Server from the client.
-.LP
-Dynamic Event Flow, however, requires only that those input events which
-need to be processed (converted) be sent to the IM Server from the client.
-.LP
-For instance, in the case of inputing a combination of ASCII characters
-and Chinese characters, ASCII characters do not need to be processed in
-the IM Server, so their key events do not have to be sent to the IM
-Server. On the other hand, key events necessary for composing Chinese
-characters must be sent to the IM Server.
-.LP
-Thus, by adopting the Dynamic Event Flow, the number of requests among the
-X Server, the client, and the IM Server is significantly reduced, and the
-number of context switches is also reduced, resulting in improved performance.
-The IM Server can send
-.PN XIM_REGISTER_TRIGGERKEYS
-message in order to switch the event flow in the Dynamic Event Flow.
-.LP
-The protocol for this process is described in section 4.5. ``Event Flow
-Control''.
-.LP
-.NH 1
-Default Preconnection Convention
-.XS
-\*(SN Default Preconnection Convention
-.XE
-.LP
-IM Servers are strongly encouraged to register their symbolic
-names as the ATOM names into the IM Server directory property,
-.PN XIM_SERVERS,
-on the root window of the screen_number 0.
-This property can contain a list of ATOMs, and the each ATOM represents
-each possible IM Server.
-IM Server names are restricted to POSIX Portable Filename Character Set.
-To discover if the IM Server is active, see if there is an owner for
-the selection with that atom name. To learn the address of that IM Server,
-convert the selection target
-.PN TRANSPORT,
-which will return a string form of the transport address(es).
-To learn the supported locales of that IM Server, convert the selection target
-.PN LOCALES,
-which will return a set of names of the supported locales in the syntax
-X/Open defines.
-.LP
-The basic semantics to determine the IM Server if there are
-multiple ATOMs are found in
-.PN XIM_SERVERS
-property, is first fit if the IM Server name is not given as
-a X modifier's category
-.PN im.
-.LP
-The address information retrievable from the
-.PN TRANSPORT
-target is a transport-specific name.
-The preregistered formats for transport-specific names are listed in Appendix B.
-Additional transport-specific names may be registered with X Consortium.
-.LP
-For environments that lack X connections, or for IM Servers which
-do not use the X Window System, the preconnection convention with IM Server
-may be given outside the X Window system (e.g. using a Name Service).
-.LP
-.NH 1
-Protocol
-.XS
-\*(SN Protocol
-.XE
-.LP
-The protocol described below uses the bi-directional
-synchronous/asynchronous request/reply/error model and is specified
-using the same conventions outlined in Section 2 of the core X Window
-System protocol [1]:
-.LP
-.NH 2
-Basic Requests Packet Format
-.XS
-\*(SN Basic Requests Packet Format
-.XE
-.LP
-This section describes the requests that may be exchanged between the client
-and the IM Server.
-.LP
-The basic request packet header format is as follows.
-.RS
-.DS
- major-opcode: CARD8
- minor-opcode: CARD8
- length: CARD16
-.DE
-.RE
-The MAJOR-OPCODE specifies which core request or extension package this
-packet represents. If the MAJOR-OPCODE corresponds to a core request,
-the MINOR-OPCODE contains 8 bits of request-specific data.
-(If the MINOR-OPCODE is not used, it is 0.)
-Otherwise, the MAJOR-OPCODE and the MINOR-OPCODE are specified by
-.PN XIM_QUERY_EXTENSION
-message. (Refer to 4.7. Query the supported extension protocol list.)
-The LENGTH field specifies the number of 4 bytes elements following the
-header. If no additional data is followed by the header, the LENGTH field
-will be 0.
-.LP
-.NH 2
-Data Types
-.XS
-\*(SN Data Types
-.XE
-.LP
-The following data types are used in the core X IM Server protocol:
-.LP
-.nf
-.ta .2i .5i 2.0i
-BITMASK16
- CARD16
-.sp
-BITMASK32
- CARD32
-.sp
-PADDING FORMAT
- Where N is some expression, and Pad(N) is the number of bytes needed to round N up to a
- multiple of four.
- Pad(N) = (4 - (N mod 4)) mod 4
-.sp
-LPCE
- 1 A character from the4 X Portable Character Set in Latin Portable
- Character Encoding
-.bp
-STRING
- 2 n length of string in bytes
- n LISTofLPCE string
- p unused, p=Pad(2+n)
-.sp
-STR
- 1 n length of name in bytes
- n STRING8 name
-.sp
-XIMATTR
- 2 CARD16 attribute ID (*1)
- 2 CARD16 type of the value (*2)
- 2 n length of im-attribute
- n STRING8 im-attribute
- p unused, p = Pad(2+n)
-.sp
-The im-attribute argument specifies XIM values such as XNQueryInputStyle.
-.sp
-XICATTR
- 2 CARD16 attribute ID (*1)
- 2 CARD16 type of the value (*2)
- 2 n length of ic-attribute
- n STRING8 ic-attribute
- p unused, p = Pad(2+n)
-.LP
-.IP (*1)
-XIMATTR and XICATTR are used during the setup stage and XIMATTRIBUTE and
-XICATTRIBUTE are used after each attribute ID has been recognized by
-the IM Server and the IM library.
-.sp
-.IP (*2)
-The value types are defined as follows:
-.TS H
-tab(:);
-l l l s s
-l l l l l
-l l l l l
-l l l l l
-l l l l l
-l l l l l
-l l l l l
-l l l l l
-l l l l l
-l l l l l
-l l l l l
-l l l l l
-l l l l l
-l l l l l
-l l l l l
-l l l l l
-l l l l l
-l l l l l
-l l l l l
-l l l l l
-l l l l l
-l l l l l
-l l l s s
-l l l s s
-l l l s s
-l l l s s
-l l l s s
-l l l l l.
-_
-.sp 6p
-.B
-values:data:format
-.sp 6p
-_
-.sp 6p
-.TH
-.R
-#0:Separator of NestedList:----- (*3)
-#1:byte data:CARD8
-#2:word data:CARD16
-#3:long data:CARD32
-#4:char data:STRING8
-#5:Window:CARD32
-#10:XIMStyles:2:n:number of XIMStyle list
-::2::unused
-::n:CARD32:XIMStyle list
-#11:XRectangle:2:INT16:X
-::2:INT16:Y
-::2:CARD16:width
-::2:CARD16:height
-#12:XPoint:2:INT16:X
-::2:INT16:Y
-#13:XFontSet:2:n:length of Base font name
-::n:STRING8:Base font name list
-::p::unused, p = Pad(2+n)
-#15:XIMHotKeyTriggers:4:n:T{
-number of XIMTRIGGERKEY list (*4)
-T}
-::n:XIMTRIGGERKEY:XIMHotkeyTrigger list
-#16:XIMHotKeyState::XIMHOTKEYSTATE:T{
-HotKey processing state
-T}
-#17:XIMStringConversion:XIMSTRCONVTEXT
-#18:XIMPreeditState:XIMPREEDITSTATE
-#19:XIMResetState:XIMRESETSTATE
-#x7fff:NestedList:-----
-.sp 6p
-_
-.TE
-.LP
-.IP (*3)
-The IC value for the separator of NestedList is defined as follows,
-.br
- #define XNSeparatorofNestedList ``separatorofNestedList''
-.br
-, which is registered in X Consortium and cannot be used for any
-other purpose.
-.sp
-.IP (*4)
-LISTofFOO
-.RS
-A Type name of the form LISTof FOO means a counted list of elements of
-type FOO.
-The size of the length field may vary (it is not necessarily the same
-size as a FOO), and in some cases, it may be implicit.
-.RE
-.sp
-.LP
-.nf
-.ta .2i .5i 2.0i
-XIMTRIGGERKEY
- 4 CARD32 keysym
- 4 CARD32 modifier
- 4 CARD32 modifier mask
-.sp
-ENCODINGINFO
- 2 n length of encoding info
- n STRING8 encoding info
- p unused, p=Pad(2+n)
-.sp
-EXT
- 1 CARD8 extension major-opcode
- 1 CARD8 extension minor-opcode
- 2 n length of extension name
- n STRING8 extension name
- p unused, p = Pad(n)
-.sp
-XIMATTRIBUTE
- 2 CARD16 attribute ID
- 2 n value length
- n value
- p unused, p = Pad(n)
-.sp
-XICATTRIBUTE
- 2 CARD16 attribute ID
- 2 n value length
- n value
- p unused, p = Pad(n)
-.sp
-.bp
-.ta .2i .5i 3.0i
-XIMSTRCONVTEXT
- 2 CARD16 XIMStringConversionFeedback
- #x0000001 XIMStringConversionLeftEdge
- #x0000002 XIMStringConversionRightEdge
- #x0000004 XIMStringConversionTopEdge
- #x0000008 XIMStringConversionBottomEdge
- #x0000010 XIMStringConversionConvealed
- #x0000020 XIMStringConversionWrapped
- 2 n byte length of the retrieved string
- n STRING8 retrieved string
- p unused, p = Pad(n)
- 2 m byte length of feedback array
- 2 unused
- m LISTofXIMSTRCONVFEEDBACK feedback array(*1)
-.IP (*1)
-This field is reserved for future use.
-.sp
-.LP
-.nf
-.ta .2i .5i 2.0i
-XIMFEEDBACK
- 4 CARD32 XIMFeedback
- #x000001 XIMReverse
- #x000002 XIMUnderline
- #x000004 XIMHighlight
- #x000008 XIMPrimary
- #x000010 XIMSecondary
- #x000020 XIMTertiary
- #x000040 XIMVisibleToForward
- #x000080 XIMVisibleToBackward
- #x000100 XIMVisibleCenter
-.sp
-XIMHOTKEYSTATE
- 4 CARD32 XIMHotKeyState
- #x0000001 XIMHotKeyStateON
- #x0000002 XIMHotKeyStateOFF
-.sp
-XIMPREEDITSTATE
- 4 CARD32 XIMPreeditState
- #x0000001 XIMPreeditEnable
- #x0000002 XIMPreeditDisable
-.sp
-XIMRESETSTATE
- 4 CARD32 XIMResetState
- #x0000001 XIMInitialState
- #x0000002 XIMPreserveState
-.LP
-.NH 2
-Error Notification
-.XS
-\*(SN Error Notification
-.XE
-.LP
-Both the IM Server and the IM library return
-.PN XIM_ERROR
-messages instead of the corresponding reply messages if any errors occur
-during data processing.
-.LP
-At most one error is generated per request. If more than one error condition
-is encountered in processing a request, the choice of which error is returned
-is implementation-dependent.
-.LP
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_ERROR (IM Server \(<-\(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-:2:BITMASK16:flag (*1)
-::#0000:Both Input-Method-ID and Input-Context-ID are invalid
-::#0001:Input-Method-ID is valid
-::#0002:Input-Context-ID is valid
-:2:CARD16:Error Code
-::#1:BadAlloc
-::#2:BadStyle
-::#3:BadClientWindow
-::#4:BadFocusWindow
-::#5:BadArea
-::#6:BadSpotLocation
-::#7:BadColormap
-::#8:BadAtom
-::#9:BadPixel
-::#10:BadPixmap
-::#11:BadName
-::#12:BadCursor
-::#13:BadProtocol
-::#14:BadForeground
-::#15:BadBackground
-::#16:LocaleNotSupported
-::#999:BadSomething (*2)
-:2:n:byte length of error detail.
-:2:CARD16:type of error detail (*3)
-:n:STRING8:error detail (*4)
-:p::unused, p = Pad(n)
-.TE
-.LP
-.IP (*1)
-Before an IM is created, both Input-Method-ID and
-Input-Context-ID are invalid.
-Before an IC is created, only Input-Method-ID is valid.
-After that, both of Input-Method-ID and Input-Context-ID are valid.
-.IP (*2)
-Unspecific error, for example ``language engine died''
-.IP (*3)
-This field is reserved for future use.
-.IP (*4)
-Vendor defined detail error message
-.RE
-.LP
-.NH 2
-Connection Establishment
-.XS
-\*(SN Connection Establishment
-.XE
-.LP
-.PN XIM_CONNECT
-message requests to establish a connection over a mutually-understood virtual
-stream.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_CONNECT (IM library \(-> IM Server)
-.sp 6p
-:1::byte order
-::#x42 MSB first
-::#x6c LSB first
-:1::unused
-:2:CARD16:client-major-protocol-version (*1)
-:2:CARD16:client-minor-protocol-version (*1)
-:2:CARD16:number of client-auth-protocol-names
-:n:LISTofSTRING:client-auth-protocol-names
-.TE
-.LP
-.IP (*1)
-Specify the version of IM Protocol that the client supports.
-.RE
-.sp
-.LP
-A client must send
-.PN XIM_CONNECT
-message as the first message on the connection.
-The list specifies the names of authentication protocols the sending
-IM Server is willing to perform.
-(If the client need not authenticate, the list may be omited.)
-.LP
-.PN XIM_AUTH_REQUIRED
-message is used to send the authentication protocol name and protocol-specific
-data.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_AUTH_REQUIRED (IM library \(<-\(-> IM Server)
-.sp 6p
-:1:CARD8:auth-protocol-index
-:3::unused
-:2:n:length of authentication data
-:2::unused
-:n:<varies>:data
-:p::unused, p = Pad(n)
-.TE
-.RE
-.LP
-The auth-protocol is specified by an index into the list of names
-given in the
-.PN XIM_CONNECT
-or
-.PN XIM_AUTH_SETUP
-message. Any protocol-specific data that might be required is also sent.
-.LP
-The IM library sends
-.PN XIM_AUTH_REPLY
-message as the reply to
-.PN XIM_AUTH_REQUIRED
-message, if the IM Server is authenticated.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_AUTH_REPLY (IM library \(-> IM Server)
-.sp 6p
-:2:n:length of authentication data
-:2::unused
-:2:n:length of authentication data
-:2::unused
-:n:<varies>:data
-:p::unused, p = Pad(n)
-.TE
-.RE
-.LP
-The auth data is specific to the authentication protocol in use.
-.LP
-.PN XIM_AUTH_NEXT
-message requests to send more auth data.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_AUTH_NEXT (IM library \(<-\(-> IM Server)
-.sp 6p
-:2:n:length of authentication data
-:2::unused
-:n:<varies>:data
-:p::unused, p = Pad(n)
-.TE
-.RE
-.LP
-The auth data is specific to the authentication protocol in use.
-.LP
-The IM Server sends
-.PN XIM_AUTH_SETUP
-message to authenticate the client.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_AUTH_SETUP (IM Server \(-> IM library)
-.sp 6p
-:2:CARD16:number of client-auth-protocol-names
-:2::unused
-:n:LISTofSTRING:server-auth-protocol-names
-.TE
-.RE
-.LP
-The list specifies the names of authentication protocols the
-client is willing to perform.
-.LP
-.PN XIM_AUTH_NG
-message requests to give up the connection.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_AUTH_NG (IM library \(<-\(-> IM Server)
-.TE
-.RE
-.LP
-The IM Server sends
-.PN XIM_CONNECT_REPLY
-message as the reply to
-.PN XIM_CONNECT
-or
-.PN XIM_AUTH_REQUIRED
-message.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_CONNECT_REPLY (IM Server \(-> IM library)
-.sp 6p
-:2:CARD16:server-major-protocol-version (*1)
-:2:CARD16:server-minor-protocol-version (*1)
-.TE
-.LP
-.IP (*1)
-Specify the version of IM Protocol that the IM Server supports.
-This document specifies major version one, minor version zero.
-.RE
-.sp
-.LP
-Here are the state diagrams for the client and the IM Server.
-.sp
-.B
-State transitions for the client
-.R
-.RS
-.LP
-\fIinit_status\fP:
-.RS
-Use authorization function \(-> \fIclient_ask\fP
-.br
-Not use authorization function \(-> \fIclient_no_check\fP
-.RE
-.sp
-.LP
-\fIstart\fP:
-.RS
-Send
-.PN XIM_CONNECT
-.RS
-If \fIclient_ask\fP \(-> \fIclient_wait1\fP
-.br
-If \fIclient_no_check\fP, client-auth-protocol-names may be omited \(-> \fIclient_wait2\fP
-.RE
-.RE
-.sp
-.LP
-\fIclient_wait1\fP:
-.RS
-Receive
-.PN XIM_AUTH_REQUIRED
-\(-> \fIclient_check\fP
-.br
-Receive <other> \(-> \fIclient_NG\fP
-.RE
-.sp
-.LP
-\fIclient_check\fP:
-.RS
-If no more auth needed, send
-.PN XIM_AUTH_REPLY
-\(-> \fIclient_wait2\fP
-.br
-If good auth data, send
-.PN XIM_AUTH_NEXT
-\(-> \fIclient_wait1\fP
-.br
-If bad auth data, send
-.PN XIM_AUTH_NG
-\(-> give up on this protocol
-.RE
-.sp
-.LP
-\fIclient_wait2\fP:
-.RS
-Receive
-.PN XIM_CONNECT_REPLY
-\(-> connect
-.br
-Receive
-.PN XIM_AUTH_SETUP
-\(-> \fIclient_more\fP
-.br
-Receive
-.PN XIM_AUTH_NEXT
-\(-> \fIclient_more\fP
-.br
-Receive
-.PN XIM_AUTH_NG
-\(-> give up on this protocol
-.br
-Receive <other> \(-> \fIclient_NG\fP
-.RE
-.sp
-.LP
-\fIclient_more\fP:
-.RS
-Send
-.PN XIM_AUTH_REQUIRED
-\(-> \fIclient_wait2\fP
-.RE
-.sp
-.LP
-\fIclient_NG\fP:
-.RS
-Send
-.PN XIM_AUTH_NG
-\(-> give up on this protocol
-.RE
-.RE
-.sp
-.LP
-.B
-State transitions for the IM Server
-.R
-.RS
-.LP
-\fIinit-status\fP:
-.RS
-Use authorization function \(-> \fIserver_ask\fP
-.br
-Not use authorization function \(-> \fIserver_no_check\fP
-.RE
-.sp
-.LP
-\fIstart\fP:
-.RS
-Receive
-.PN XIM_CONNECT
-\(-> \fIstart2\fP
-.br
-Receive <other> \(-> \fIserver_NG\fP
-.RE
-.sp
-.LP
-\fIstart2\fP:
-.RS
-If \fIclient_ask\fP, send
-.PN XIM_AUTH_REQUIRED
-\(-> \fIserver_wait1\fP
-.br
-If \fIclient_no_check\fP and \fIserver_ask\fP, send
-.PN XIM_AUTH_SETUP
-\(-> \fIserver_wait2\fP
-.br
-If \fIclient_no_check\fP and \fIserver_no_check\fP, send
-.PN XIM_CONNECT_REPLY
-\(-> connect
-.RE
-.sp
-.LP
-\fIserver_wait1\fP:
-.RS
-Receive
-.PN XIM_AUTH_REPLY
-\(-> \fIserver2\fP
-.br
-Receive
-.PN XIM_AUTH_NEXT
-\(-> \fIserver_more\fP
-.br
-Receive <other> \(-> \fIserver_NG\fP
-.RE
-.sp
-.LP
-\fIserver_more\fP
-.RS
-Send
-.PN XIM_AUTH_REQUIRED
-\(-> \fIserver_wait1\fP
-.RE
-.sp
-.LP
-\fIserver2\fP
-.RS
-If \fIserver_ask\fP, send
-.PN XIM_AUTH_SETUP
-\(-> \fIserver_wait2\fP
-.br
-If \fIserver_no_check\fP, send
-.PN XIM_CONNECT_REPLY
-\(-> connect
-.RE
-.sp
-.LP
-\fIserver_wait2\fP
-.RS
-Receive
-.PN XIM_AUTH_REQUIRED
-\(-> \fIserver_check\fP
-.br
-Receive <other> \(-> \fIserver_NG\fP
-.RE
-.sp
-.LP
-\fIserver_check\fP
-.RS
-If no more auth data, send
-.PN XIM_CONNECT_REPLY
-\(-> connect
-.br
-If bad auth data, send
-.PN XIM_AUTH_NG
-\(-> give up on this protocol
-.br
-If good auth data, send
-.PN XIM_AUTH_NEXT
-\(-> \fIserver_wait2\fP
-.RE
-.sp
-.LP
-\fIserver_NG\fP
-.RS
-Send
-.PN XIM_AUTH_NG
-\(-> give up on this protocol
-.RE
-.RE
-.sp
-.LP
-.PN XIM_DISCONNECT
-message requests to shutdown the connection over a mutually-understood
-virtual stream.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_DISCONNECT (IM library \(-> IM Server)
-.TE
-.RE
-.LP
-.PN XIM_DISCONNECT
-is a synchronous request. The IM library should wait until it receives
-either an
-.PN XIM_DISCONNECT_REPLY
-packet or an
-.PN XIM_ERROR
-packet.
-.LP
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_DISCONNECT_REPLY (IM Server \(-> IM library)
-.TE
-.RE
-.LP
-.PN XIM_OPEN
-requests to establish a logical connection between the IM library and the IM
-Server.
-.LP
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_OPEN (IM library \(-> IM Server)
-.sp 6p
-:n:STR:locale name
-:p::unused, p = Pad(n)
-.TE
-.RE
-.LP
-.PN XIM_OPEN
-is a synchronous request. The IM library should wait until receiving
-either an
-.PN XIM_OPEN_REPLY
-packet or an
-.PN XIM_ERROR
-packet.
-.LP
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_OPEN_REPLY (IM Server \(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:n:byte length of IM attributes supported
-:n:LISTofXIMATTR:IM attributes supported
-:2:m:byte length of IC attributes supported
-:2:CARD16:unused
-:m:LISTofXICATTR: IC attributes supported
-.TE
-.RE
-.LP
-.PN XIM_OPEN_REPLY
-message returns all supported IM and IC attributes in LISTofXIMATTR and
-LISTofXICATTR. These IM and IC attribute IDs are used to reduce the amount
-of data which must be transferred via the network. In addition, this
-indicates to the IM library what kinds of IM/IC attributes can be used
-in this session, and what types of data will be exchanged. This allows
-the IM Server provider and application writer to support IM system
-enhancements with new IM/IC attributes, without modifying Xlib.
-The IC value for the separator of NestedList must be included in the
-LISTofXICATTR.
-.LP
-.PN XIM_CLOSE
-message requests to shutdown the logical connection between the IM library
-and the IM Server.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_CLOSE (IM library \(-> IM Server)
-.sp 6p
-:2:CARD16:input-method-ID
-:2::unused
-.TE
-.RE
-.LP
-.PN XIM_CLOSE
-is a synchronous request. The IM library should wait until receiving
-either an
-.PN XIM_CLOSE_REPLY
-packet or an
-.PN XIM_ERROR
-packet.
-.LP
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_CLOSE_REPLY (IM Server \(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2::unused
-.TE
-.RE
-.LP
-.NH 2
-Event Flow Control
-.XS
-\*(SN Event Flow Control
-.XE
-.LP
-An IM Server must send
-.PN XIM_SET_EVENT_MASK
-message to the IM library in order for events to be forwarded to the IM
-Server, since the IM library initially doesn't forward any events to the
-IM Server. In the protocol, the IM Server will specify masks of X events
-to be forwarded and which need to be synchronized by the IM library.
-.LP
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_SET_EVENT_MASK (IM Server \(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-:4:EVENTMASK:forward-event-mask (*1)
-:4:EVENTMASK:synchronous-event-mask (*2)
-.TE
-.LP
-.IP (*1)
-Specify all the events to be forwarded to the IM Server by the IM library.
-.IP (*2)
-Specify the events to be forwarded with synchronous flag on by the IM library.
-.RE
-.sp
-.LP
-.PN XIM_SET_EVENT_MASK
-is an asynchronous request. The event masks are valid immediately after
-they are set until changed by another
-.PN XIM_SET_EVENT_MASK
-message. If input-context-ID is set to zero, the default value of the
-input-method-ID will be changed to the event masks specified in the request.
-That value will be used for the IC's which have no individual values.
-.LP
-Using the Dynamic Event Flow model, an IM Server sends
-.PN XIM_REGISTER_TRIGGERKEYS
-message to the IM library before sending
-.PN XIM_OPEN_REPLY
-message.
-Or the IM library may suppose that the IM Server uses the Static Event Flow
-model.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_REGISTER_TRIGGERKEYS (IM Server \(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2::unused
-:4:n:byte length of on-keys
-:n:LISTofXIMTRIGGERKEY:on-keys list
-:4:m:byte length of off-keys
-:m:LISTofXIMTRIGGERKEY:off-keys list
-.TE
-.RE
-.LP
-.PN XIM_REGISTER_TRIGGERKEYS
-is an asynchronous request.
-The IM Server notifys the IM library of on-keys and off-keys lists with
-this message.
-.LP
-The IM library notifys the IM Server with
-.PN XIM_TRIGGER_NOTIFY
-message that a key event matching either on-keys or off-keys has been occurred.
-.LP
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_TRIGGER_NOTIFY (IM library \(-> IM Server)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-:4:CARD32:flag
-::#0:on-keys list
-::#1:off-keys list
-:4:CARD32:index of keys list
-:4:EVENTMASK:client-select-event-mask (*1)
-.TE
-.LP
-.IP (*1)
-Specify the events currently selected by the IM library with XSelectInput.
-.RE
-.sp
-.LP
-.PN XIM_TRIGGER_NOTIFY
-is a synchronous request. The IM library should wait until receiving
-either an
-.PN XIM_TRIGGER_NOTIFY_REPLY
-packet or an
-.PN XIM_ERROR
-packet.
-.LP
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_TRIGGER_NOTIFY_REPLY (IM Server \(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-.TE
-.RE
-.LP
-.NH 2
-Encoding Negotiation
-.XS
-\*(SN Encoding Negotiation
-.XE
-.LP
-.PN XIM_ENCODING_NEGOTIATION
-message requests to decide which encoding to be sent across the wire.
-When the negotiation fails, the fallback default encoding is Portable
-Character Encoding.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_ENCODING_NEGOTIATION (IM library \(-> IM Server).sp 6p
-:2:CARD16:input-method-ID
-:2:n:byte length of encodings listed by name
-:n:LISTofSTR:list of encodings supported in the IM library.
-:p::unused, p = Pad(n)
-:2:m:byte length of encodings listed by detailed data
-:2::unused
-:m:LISTofENCODINGINFO:list of encordings supported in the IM library
-.TE
-.RE
-.LP
-The IM Server must choose one encoding from the list sent by the IM library.
-If index of the encording determined is -1 to indicate that the negotiation
-is failed, the fallback default encoding is used.
-The message must be issued after sending
-.PN XIM_OPEN
-message via XOpenIM().
-The name of encoding may be registered with X Consortium.
-.LP
-.PN XIM_ENCODING_NEGOTIATION
-is a synchronous request. The IM library should wait until receiving
-either an
-.PN XIM_ENCODING_NEGOTIATION_REPLY
-packet or an
-.PN XIM_ERROR
-packet.
-.LP
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_ENCODING_NEGOTIATION_REPLY (IM Server \(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:category of the encoding determined.
-::#0:name
-::#1:detailed data
-:2:INT16:index of the encoding determinated.
-:2::unused
-.TE
-.RE
-.LP
-.NH 2
-Query the supported extension protocol list
-.XS
-\*(SN Query the supported extension protocol list
-.XE
-.LP
-.PN XIM_QUERY_EXTENSION
-message requests to query the IM extensions supported by the IM Server to
-which the client is being connected.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_QUERY_EXTENSION (IM library \(-> IM Server)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:n:T{
-byte length of extensions supported by the IM library
-T}
-:n:LISTofSTR:extensions supported by the IM library
-:p::unused, p = Pad(n)
-.TE
-.RE
-.LP
-An example of a supported extension is FrontEnd.
-The message must be issued after sending
-.PN XIM_OPEN
-message via XOpenIM().
-.LP
-If n is 0, the IM library queries the IM Server for all extensions.
-.LP
-If n is not 0, the IM library queries whether the IM Server supports the
-contents specified in the list.
-.LP
-If a client uses an extension request without previously having issued a
-.PN XIM_QUERY_EXTENSION
-message for that extension, the IM Server responds with a
-.PN BadProtocol
-error. If the IM Server encounters a request with an unknown MAJOR-OPCODE
-or MINOR-OPCODE, it responds with a
-.PN BadProtocol
-error.
-.LP
-.PN XIM_QUERY_EXTENSION
-is a synchronous request. The IM library should wait until receiving
-either an
-.PN XIM_QUERY_EXTENSION_REPLY
-packet or an
-.PN XIM_ERROR
-packet.
-.LP
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_QUERY_EXTENSION_REPLY (IM Server \(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:n:T{
-byte length of extensions supported by both the IM library and the IM Server
-T}
-:n:LISTofEXT:T{
-list of extensions supported by both the IM library and the IM Server
-T}
-.TE
-.RE
-.LP
-.PN XIM_QUERY_EXTENSION_REPLY
-message returns the list of extensions supported by both the IM library and
-the IM Server. If the list passed in
-.PN XIM_QUERY_EXTENSION
-message is NULL, the IM Server returns the full list of extensions supported
-by the IM Server. If the list is not NULL, the IM Server returns the
-extensions in the list that are supported by the IM Server.
-.LP
-A zero-length string is not a valid extension name. The IM library should
-disregard any zero-length strings that are returned in the extension list.
-The IM library does not use the requests which are not supported by the IM
-Server.
-.LP
-.NH 2
-Setting IM Values
-.XS
-\*(SN Setting IM Values
-.XE
-.LP
-.PN XIM_SET_IM_VALUES
-requests to set attributes to the IM.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_SET_IM_VALUES (IM library \(-> IM Server)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:n:byte length of im-attribute
-:n:LISTofXIMATTRIBUTE:im-attributes
-.TE
-.RE
-.LP
-The im-attributes in
-.PN XIM_SET_IM_VALUES
-message are specified as a LISTofXIMATTRIBUTE, specifying the attributes
-to be set. Attributes other than the ones returned by
-.PN XIM_OPEN_REPLY
-message should not be specified.
-.LP
-.PN XIM_SET_IM_VALUES
-is a synchronous request. The IM library should wait until receiving
-either an
-.PN XIM_SET_IM_VALUES_REPLY
-packet or an
-.PN XIM_ERROR
-packet, because it must receive the error attribute if
-.PN XIM_ERROR
-message is returned.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_SET_IM_VALUES_REPLY (IM Server \(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2::unused
-.TE
-.RE
-.LP
-.PN XIM_SET_IM_VALUES_REPLY
-message returns the input-method-ID to distinguish replies from multiple IMs.
-.LP
-.NH 2
-Getting IM Values
-.XS
-\*(SN getting IM Values
-.XE
-.LP
-.PN XIM_GET_IM_VALUES
-requests to query IM values supported by the IM Server currently being
-connected.
-.LP
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_GET_IM_VALUES (IM library \(-> IM Server)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:n:byte length of im-attribute-id
-:n:LISTofCARD16:im-attribute-id
-:p::unused, p=Pad(n)
-.TE
-.RE
-.LP
-.PN XIM_GET_IM_VALUES
-is a synchronous request. The IM library should wait until it receives
-either an
-.PN XIM_GET_IM_VALUES_REPLY
-packet or an
-.PN XIM_ERROR
-packet.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_GET_IM_VALUES_REPLY (IM Server \(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:n:byte length of im-attributes returned
-:n:LISTofXIMATTRIBUTE:im-attributes returned
-.TE
-.RE
-.LP
-The IM Server returns IM values with
-.PN XIM_GET_IM_VALUES_REPLY
-message. The order of the returned im-attribute values corresponds directly
-to that of the list passed with the
-.PN XIM_GET_IM_VALUES
-message.
-.LP
-.NH 2
-Creating an IC
-.XS
-\*(SN Creating an IC
-.XE
-.LP
-.PN XIM_CREATE_IC
-message requests to create an IC.
-.LP
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_CREATE_IC (IM library \(-> IM Server)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:n:byte length of ic-attributes
-:n:LISTofXICATTRIBUTE:ic-attributes
-.TE
-.RE
-.LP
-The input-context-id is specified by the IM Server to identify the client
-(IC). (It is not specified by the client in
-.PN XIM_CREATE_IC
-message.), and it should not be set to zero.
-.LP
-.PN XIM_CREATE_IC
-is a synchronous request which returns the input-context-ID.
-The IM library should wait until it receives either an
-.PN XIM_CREATE_IC_REPLY
-packet or an
-.PN XIM_ERROR
-packet.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_CREATE_IC_REPLY (IM Server \(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-.TE
-.RE
-.LP
-.NH 2
-Destroying the IC
-.XS
-\*(SN Destroying the IC
-.XE
-.LP
-.PN XIM_DESTROY_IC
-message requests to destroy the IC.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_DESTROY_IC (IM library \(-> IM Server)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-.TE
-.RE
-.LP
-.PN XIM_DESTROY_IC
-is a synchronous request. The IM library should not free its resources
-until it receives an
-.PN XIM_DESTROY_IC_REPLY
-message because
-.PN XIM_DESTROY_IC
-message may result in Callback packets such as
-.PN XIM_PREEDIT_DRAW
-and
-.PN XIM_PREEDIT_DONE.
-.LP
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_DESTROY_IC_REPLY (IM Server \(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-.TE
-.RE
-.LP
-.NH 2
-Setting IC Values
-.XS
-\*(SN Setting IC Values
-.XE
-.LP
-.PN XIM_SET_IC_VALUES
-messages requests to set attributes to the IC.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_SET_IC_VALUES (IM library \(-> IM Server)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-:2:n:byte length of ic-attributes
-:2::unused
-:n:LISTofXICATTRIBUTE:ic-attributes
-.TE
-.RE
-.LP
-The ic-attributes in
-.PN XIM_SET_IC_VALUES
-message are specified as a LISTofXICATTRIBUTE, specifying the attributes
-to be set. Attributes other than the ones returned by
-.PN XIM_OPEN_REPLY
-message should not be specified.
-.LP
-.PN XIM_SET_IC_VALUES
-is a synchronous request. The IM library should wait until receiving
-either an
-.PN XIM_SET_IC_VALUES_REPLY
-packet or an
-.PN XIM_ERROR
-packet, because it must receive the error attribute if
-.PN XIM_ERROR
-message is returned.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_SET_IC_VALUES_REPLY (IM Server \(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-.TE
-.RE
-.LP
-.NH 2
-Getting IC Values
-.XS
-\*(SN Getting IC Values
-.XE
-.LP
-.PN XIM_GET_IC_VALUES
-message requests to query IC values supported by the IM Server currently
-being connected.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_GET_IC_VALUES (IM library \(-> IM Server)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-:2:n:byte length of ic-attribute-id
-:n:LISTofCARD16:ic-attribute-id
-:p::unused, p=Pad(2+n)
-.TE
-.RE
-.LP
-In LISTofCARD16, the appearance of the ic-attribute-id for the separator
-of NestedList shows the end of the heading nested list.
-.LP
-.PN XIM_GET_IC_VALUES
-is a synchronous request and returns each attribute with its values to
-show the correspondence. The IM library should wait until receiving
-either an
-.PN XIM_GET_IC_VALUES_REPLY
-packet or an
-.PN XIM_ERROR
-packet.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_GET_IC_VALUES_REPLY (IM Server \(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-:2:n:byte length of ic-attribute
-:2::unused
-:n:LISTofXICATTRIBUTE:ic-attribute
-.TE
-.RE
-.LP
-.NH 2
-Setting IC Focus
-.XS
-\*(SN Setting IC Focus
-.XE
-.LP
-.PN XIM_SET_IC_FOCUS
-message requests to set the focus to the IC.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_SET_IC_FOCUS (IM library \(-> IM Server)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-.TE
-.RE
-.LP
-.PN XIM_SET_IC_FOCUS
-is an asynchronous request.
-.LP
-.NH 2
-Unsetting IC Focus
-.XS
-\*(SN Unsetting IC Focus
-.XE
-.LP
-.PN XIM_UNSET_IC_FOCUS
-message requests to unset the focus to the focused IC.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_UNSET_IC_FOCUS (IM library \(-> IM Server)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-.TE
-.RE
-.LP
-.PN XIM_UNSET_IC_FOCUS
-is an asynchronous request.
-.LP
-.NH 2
-Filtering Events
-.XS
-\*(SN Filtering Events
-.XE
-.LP
-Event filtering is mainly provided for BackEnd method to allow input method
-to capture X events transparently to clients.
-.LP
-X Events are forwarded by
-.PN XIM_FORWARD_EVENT
-message.
-This message can be operated both synchronously and asynchronously.
-If the requester sets the synchronous flag, the receiver must send
-.PN XIM_SYNC_REPLY
-message back to the requester when all the data processing is done.
-.sp
-.B
-Protocol flow of BackEnd model
-.R
-.LP
-.LP
-With BackEnd method, the protocol flow can be classified into two
-methods in terms of synchronization, depending on the synchronous-eventmask
-of
-.PN XIM_SET_EVENT_MASK
-message. One can be called on-demand-synchronous method and another
-can be called as full-synchronous method.
-.LP
-In on-demand-synchronous method, the IM library always receives
-.PN XIM_FORWARD_EVENT
-or
-.PN XIM_COMMIT
-message as a synchronous request. Also, the IM Server needs to synchronously
-process the correspondent reply from the IM library and the following
-.PN XIM_FORWARD_EVENT
-message sent from the IM library when any of the event causes the IM Server
-to send
-.PN XIM_FORWARD_EVENT
-or
-.PN XIM_COMMIT
-message to the IM library, so that the input service is consistent. If the
-IM library gets the control back from the application after receiving the
-synchronous request, the IM library replies for the synchronous request before
-processing any of the events. In this time, the IM Server blocks
-.PN XIM_FORWARD_EVENT
-message which is sent by the IM library, and handles it after receiving the
-reply. However, the IM Server handles the other protocols at any time.
-.LP
-In full-synchronous method, the IM library always sends
-.PN XIM_FORWARD_EVENT
-message to the IM Server as a synchronous request. Therefore, the reply to it
-from the IM Server will be put between the
-.PN XIM_FORWARD_EVENT
-message and its
-.PN XIM_SYNC_REPLY
-message.
-In case of sending
-.PN XIM_FORWARD_EVENT
-or
-.PN XIM_COMMIT
-message, the IM Server should set the synchronous flag off. Because the
-synchronization can be done by the following
-.PN XIM_SYNC_REPLY
-message.
-.sp
-.LP
-.B
-Sample Protocol flow chart 1
-.R
-.LP
-Following chart shows one of the simplest protocol flow which only
-deals with keyevents for preediting operation.
-.LP
-.\"====================== event flow figure start =====================
-\^... 0.425 6.888 6.3 10.296
-\^... 0.000i 3.408i 5.875i 0.000i
-.nr 00 \n(.u
-.nf
-.PS 3.408i 5.875i
-.br
-.ps 11
-\h'3.125i'\v'0.496i'\D'l1.625i 0.250i'
-.sp -1
-\h'4.647i'\v'0.756i'\D'l0.103i -0.010i'
-.sp -1
-\h'4.655i'\v'0.706i'\D'l0.095i 0.040i'
-.sp -1
-\h'3.125i'\v'1.221i'\D'l1.687i 0.188i'
-.sp -1
-\h'4.710i'\v'1.423i'\D'l0.102i -0.014i'
-.sp -1
-\h'4.715i'\v'1.373i'\D'l0.097i 0.036i'
-.sp -1
-\h'4.750i'\v'0.971i'\D'l-1.625i 0.438i'
-.sp -1
-\h'3.215i'\v'1.359i'\D'l-0.090i 0.050i'
-.sp -1
-\h'3.228i'\v'1.407i'\D'l-0.103i 0.002i'
-.sp -1
-\h'2.000i'\v'0.409i'\D'l1.000i 0.062i'
-.sp -1
-\h'2.899i'\v'0.490i'\D'l0.101i -0.019i'
-.sp -1
-\h'2.902i'\v'0.440i'\D'l0.098i 0.031i'
-.sp -1
-\h'2.000i'\v'1.034i'\D'l1.000i 0.125i'
-.sp -1
-\h'2.898i'\v'1.171i'\D'l0.102i -0.012i'
-.sp -1
-\h'2.904i'\v'1.122i'\D'l0.096i 0.037i'
-.sp -1
-\h'3.000i'\v'1.409i'\D'l-1.000i 0.062i'
-.sp -1
-\h'2.098i'\v'1.440i'\D'l-0.098i 0.031i'
-.sp -1
-\h'2.101i'\v'1.490i'\D'l-0.101i -0.019i'
-.sp -1
-\h'1.125i'\v'1.846i'\l'-0.500i'
-.sp -1
-\h'0.725i'\v'1.821i'\D'l-0.100i 0.025i'
-.sp -1
-\h'0.725i'\v'1.871i'\D'l-0.100i -0.025i'
-.sp -1
-\h'0.688i'\v'0.159i'\l'0.437i'
-.sp -1
-\h'1.025i'\v'0.184i'\D'l0.100i -0.025i'
-.sp -1
-\h'1.025i'\v'0.134i'\D'l0.100i 0.025i'
-.sp -1
-\h'0.688i'\v'0.846i'\l'0.437i'
-.sp -1
-\h'1.025i'\v'0.871i'\D'l0.100i -0.025i'
-.sp -1
-\h'1.025i'\v'0.821i'\D'l0.100i 0.025i'
-.sp -1
-\h'5.562i'\v'1.409i'\l'0.313i'
-.sp -1
-\h'5.875i'\v'1.409i'\v'-.13m'\L'1.937i\(br'\v'.13m'
-.sp -1
-\h'5.875i'\v'3.346i'\D'l-0.250i 0.000i'
-.sp -1
-\h'5.725i'\v'3.321i'\D'l-0.100i 0.025i'
-.sp -1
-\h'5.725i'\v'3.371i'\D'l-0.100i -0.025i'
-.sp -1
-\h'2.062i'\v'2.096i'\l'0.875i'
-.sp -1
-\h'2.837i'\v'2.121i'\D'l0.100i -0.025i'
-.sp -1
-\h'2.837i'\v'2.071i'\D'l0.100i 0.025i'
-.sp -1
-\h'3.000i'\v'0.034i'\v'-.13m'\L'3.374i\(br'\v'.13m'
-.sp -1
-\h'4.875i'\v'0.034i'\v'-.13m'\L'3.374i\(br'\v'.13m'
-.sp -1
-\h'2.013i'\v'2.871i'\D'l0.937i 0.250i'
-.sp -1
-\h'2.847i'\v'3.119i'\D'l0.103i 0.002i'
-.sp -1
-\h'2.860i'\v'3.071i'\D'l0.090i 0.050i'
-.sp -1
-\h'3.062i'\v'3.134i'\D'l1.688i 0.187i'
-.sp -1
-\h'4.648i'\v'3.335i'\D'l0.102i -0.014i'
-.sp -1
-\h'4.653i'\v'3.285i'\D'l0.097i 0.036i'
-.sp -1
-\h'3.062i'\v'2.533i'\D'l1.750i 0.213i'
-.sp -1
-\h'4.710i'\v'2.759i'\D'l0.102i -0.013i'
-.sp -1
-\h'4.716i'\v'2.709i'\D'l0.096i 0.037i'
-.sp -1
-\h'3.062i'\v'2.096i'\l'1.750i'
-.sp -1
-\h'4.712i'\v'2.121i'\D'l0.100i -0.025i'
-.sp -1
-\h'4.712i'\v'2.071i'\D'l0.100i 0.025i'
-.sp -1
-\h'4.812i'\v'2.284i'\l'-1.750i'
-.sp -1
-\h'3.162i'\v'2.259i'\D'l-0.100i 0.025i'
-.sp -1
-\h'3.162i'\v'2.309i'\D'l-0.100i -0.025i'
-.sp -1
-\h'1.250i'\v'0.193i'\h'-0.0m'\v'0.2m'\s10\fRXNextEvent\fP
-.sp -1
-\h'1.250i'\v'0.381i'\h'-0.0m'\v'0.2m'\s10\fRXFilterEvent\fP
-.sp -1
-\h'1.250i'\v'0.881i'\h'-0.0m'\v'0.2m'\s10\fRXNextEvent\fP
-.sp -1
-\h'1.250i'\v'1.068i'\h'-0.0m'\v'0.2m'\s10\fRXFilterEvent\fP
-.sp -1
-\h'1.250i'\v'1.506i'\h'-0.0m'\v'0.2m'\s10\fRXNextEvent\fP
-.sp -1
-\h'1.250i'\v'1.881i'\h'-0.0m'\v'0.2m'\s10\fRXmbLookupString\fP
-.sp -1
-\h'4.875i'\h'-0.0m'\v'0.2m'\s12\fRIM Server\fP
-.sp -1
-\h'2.437i'\h'-0.0m'\v'0.2m'\s12\fRIM library\fP
-.sp -1
-\h'1.250i'\v'1.693i'\h'-0.0m'\v'0.2m'\s10\fRXFilterEvent (returns False) \fP
-.sp -1
-\v'2.168i'\h'-0.0m'\v'0.2m'\s10\fRthe focus\fP
-.sp -1
-\h'1.250i'\h'-0.0m'\v'0.2m'\s12\fRXlib API\fP
-.sp -1
-\v'2.006i'\h'-0.0m'\v'0.2m'\s10\fRApplication moves\fP
-.sp -1
-\h'3.187i'\v'0.443i'\h'-0.0m'\v'0.2m'\s10\fRXIM_FORWARD_EVENT\fP
-.sp -1
-\h'3.187i'\v'0.881i'\h'-0.0m'\v'0.2m'\s10\fRXIM_FORWARD_EVENT\fP
-.sp -1
-\h'3.187i'\v'1.631i'\h'-0.0m'\v'0.2m'\s10\fRXIM_FORWARD_EVENT\fP
-.sp -1
-\h'3.187i'\v'1.006i'\h'-0.0m'\v'0.2m'\s10\fRor XIM_COMMIT\fP
-.sp -1
-\h'5.000i'\v'0.881i'\h'-0.0m'\v'0.2m'\s10\fRsynchronous \fP
-.sp -1
-\h'5.000i'\v'1.006i'\h'-0.0m'\v'0.2m'\s10\fRrequest\fP
-.sp -1
-\h'0.062i'\v'0.193i'\h'-0.0m'\v'0.2m'\s10\fRKey event\fP
-.sp -1
-\h'0.062i'\v'0.881i'\h'-0.0m'\v'0.2m'\s10\fRKey event\fP
-.sp -1
-\h'3.187i'\v'1.131i'\h'-0.0m'\v'0.2m'\s10\fR(synchronous) \fP
-.sp -1
-\h'5.000i'\v'1.443i'\h'-0.0m'\v'0.2m'\s10\fRPending\fP
-.sp -1
-\h'5.000i'\v'2.381i'\h'-0.0m'\v'0.2m'\s10\fRprocessed\fP
-.sp -1
-\h'5.000i'\v'2.506i'\h'-0.0m'\v'0.2m'\s10\fR(The focused\fP
-.sp -1
-\h'5.000i'\v'2.631i'\h'-0.0m'\v'0.2m'\s10\fRIC is changed) \fP
-.sp -1
-\h'5.000i'\v'2.881i'\h'-0.0m'\v'0.2m'\s10\fRprocessed\fP
-.sp -1
-\h'1.250i'\v'2.131i'\h'-0.0m'\v'0.2m'\s10\fRXSetICFocus\fP
-.sp -1
-\h'3.125i'\v'2.881i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SYNC_REPLY as a reply\fP
-.sp -1
-\h'3.125i'\v'3.043i'\h'-0.0m'\v'0.2m'\s10\fRof the XIM_FORWARD_EVENT\fP
-.sp -1
-\h'1.250i'\v'2.881i'\h'-0.0m'\v'0.2m'\s10\fRXNextEvent\fP
-.sp -1
-\h'3.312i'\v'2.506i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SET_IC_FOCUS\fP
-.sp -1
-\h'3.312i'\v'2.006i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SYNC\fP
-.sp -1
-\h'3.312i'\v'2.193i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SYNC_REPLY\fP
-.sp -1
-\h'5.000i'\v'3.381i'\h'-0.0m'\v'0.2m'\s10\fRprocessed\fP
-.sp -1
-.sp 1+3.408i
-.PE
-.if \n(00 .fi
-
-.\"====================== event flow figure end =======================
-.ce
-.sp
-Fig.2 Sample Protocol Flow
-.sp
-.LP
-.B
-Sample Protocol flow chart 2
-.R
-.LP
-Following chart shows one of the complex protocol flow, which deals
-with multiple focus windows and button press event as well as keyevent,
-and the focus is moved by the application triggered by both of keyevent
-and button press event.
-.LP
-.bp
-.\"====================== event2 flow figure start =====================
-\^... 0.425 5.575 6.3 10.296
-\^... 0.000i 4.721i 5.875i 0.000i
-.nr 00 \n(.u
-.nf
-.PS 4.721i 5.875i
-.br
-.ps 11
-\h'3.125i'\v'0.496i'\D'l1.625i 0.163i'
-.sp -1
-\h'4.648i'\v'0.674i'\D'l0.102i -0.015i'
-.sp -1
-\h'4.653i'\v'0.624i'\D'l0.097i 0.035i'
-.sp -1
-\h'2.000i'\v'0.409i'\D'l1.000i 0.062i'
-.sp -1
-\h'2.899i'\v'0.490i'\D'l0.101i -0.019i'
-.sp -1
-\h'2.902i'\v'0.440i'\D'l0.098i 0.031i'
-.sp -1
-\h'0.688i'\v'0.159i'\l'0.437i'
-.sp -1
-\h'1.025i'\v'0.184i'\D'l0.100i -0.025i'
-.sp -1
-\h'1.025i'\v'0.134i'\D'l0.100i 0.025i'
-.sp -1
-\h'1.250i'\v'0.193i'\h'-0.0m'\v'0.2m'\s10\fRXNextEvent\fP
-.sp -1
-\h'1.250i'\v'0.381i'\h'-0.0m'\v'0.2m'\s10\fRXFilterEvent\fP
-.sp -1
-\h'3.187i'\v'0.443i'\h'-0.0m'\v'0.2m'\s10\fRXIM_FORWARD_EVENT\fP
-.sp -1
-\h'0.062i'\v'0.193i'\h'-0.0m'\v'0.2m'\s10\fRKey event\fP
-.sp -1
-\h'3.125i'\v'1.221i'\D'l1.687i 0.125i'
-.sp -1
-\h'4.710i'\v'1.364i'\D'l0.102i -0.018i'
-.sp -1
-\h'4.714i'\v'1.314i'\D'l0.098i 0.032i'
-.sp -1
-\h'4.750i'\v'0.971i'\D'l-1.625i 0.750i'
-.sp -1
-\h'3.205i'\v'1.656i'\D'l-0.080i 0.065i'
-.sp -1
-\h'3.226i'\v'1.702i'\D'l-0.101i 0.019i'
-.sp -1
-\h'2.000i'\v'1.034i'\D'l1.000i 0.125i'
-.sp -1
-\h'2.898i'\v'1.171i'\D'l0.102i -0.012i'
-.sp -1
-\h'2.904i'\v'1.122i'\D'l0.096i 0.037i'
-.sp -1
-\h'0.688i'\v'0.846i'\l'0.437i'
-.sp -1
-\h'1.025i'\v'0.871i'\D'l0.100i -0.025i'
-.sp -1
-\h'1.025i'\v'0.821i'\D'l0.100i 0.025i'
-.sp -1
-\h'3.000i'\v'0.034i'\v'-.13m'\L'4.687i\(br'\v'.13m'
-.sp -1
-\h'0.750i'\v'1.346i'\l'0.313i'
-.sp -1
-\h'0.963i'\v'1.371i'\D'l0.100i -0.025i'
-.sp -1
-\h'0.963i'\v'1.321i'\D'l0.100i 0.025i'
-.sp -1
-\h'3.125i'\v'1.509i'\D'l1.687i 0.125i'
-.sp -1
-\h'4.710i'\v'1.652i'\D'l0.102i -0.018i'
-.sp -1
-\h'4.714i'\v'1.602i'\D'l0.098i 0.032i'
-.sp -1
-\h'4.812i'\v'1.721i'\D'l-1.687i 0.188i'
-.sp -1
-\h'3.222i'\v'1.873i'\D'l-0.097i 0.036i'
-.sp -1
-\h'3.227i'\v'1.923i'\D'l-0.102i -0.014i'
-.sp -1
-\h'2.937i'\v'1.971i'\D'l-0.937i 0.188i'
-.sp -1
-\h'2.093i'\v'2.115i'\D'l-0.093i 0.044i'
-.sp -1
-\h'2.103i'\v'2.164i'\D'l-0.103i -0.005i'
-.sp -1
-\h'1.125i'\v'2.533i'\l'-0.500i'
-.sp -1
-\h'0.725i'\v'2.508i'\D'l-0.100i 0.025i'
-.sp -1
-\h'0.725i'\v'2.558i'\D'l-0.100i -0.025i'
-.sp -1
-\h'5.562i'\v'1.346i'\l'0.313i'
-.sp -1
-\h'5.875i'\v'1.346i'\v'-.13m'\L'2.687i\(br'\v'.13m'
-.sp -1
-\h'5.875i'\v'4.033i'\D'l-0.250i 0.000i'
-.sp -1
-\h'5.725i'\v'4.008i'\D'l-0.100i 0.025i'
-.sp -1
-\h'5.725i'\v'4.058i'\D'l-0.100i -0.025i'
-.sp -1
-\h'2.013i'\v'3.559i'\D'l0.937i 0.250i'
-.sp -1
-\h'2.847i'\v'3.807i'\D'l0.103i 0.002i'
-.sp -1
-\h'2.860i'\v'3.759i'\D'l0.090i 0.050i'
-.sp -1
-\h'3.062i'\v'3.821i'\D'l1.688i 0.188i'
-.sp -1
-\h'4.648i'\v'4.023i'\D'l0.102i -0.014i'
-.sp -1
-\h'4.653i'\v'3.973i'\D'l0.097i 0.036i'
-.sp -1
-\h'2.000i'\v'1.358i'\D'l1.000i 0.126i'
-.sp -1
-\h'2.898i'\v'1.496i'\D'l0.102i -0.012i'
-.sp -1
-\h'2.904i'\v'1.447i'\D'l0.096i 0.037i'
-.sp -1
-\h'3.062i'\v'2.159i'\D'l-0.250i 0.000i'
-.sp -1
-\h'2.812i'\v'2.159i'\v'-.13m'\L'1.812i\(br'\v'.13m'
-.sp -1
-\h'2.812i'\v'3.971i'\D'l0.125i 0.125i'
-.sp -1
-\h'2.849i'\v'4.043i'\D'l0.088i 0.053i'
-.sp -1
-\h'2.884i'\v'4.008i'\D'l0.053i 0.088i'
-.sp -1
-\h'2.062i'\v'2.783i'\l'0.875i'
-.sp -1
-\h'2.837i'\v'2.808i'\D'l0.100i -0.025i'
-.sp -1
-\h'2.837i'\v'2.758i'\D'l0.100i 0.025i'
-.sp -1
-\h'2.062i'\v'3.783i'\D'l0.813i 0.438i'
-.sp -1
-\h'2.775i'\v'4.196i'\D'l0.100i 0.025i'
-.sp -1
-\h'2.799i'\v'4.152i'\D'l0.076i 0.069i'
-.sp -1
-\h'0.625i'\v'3.533i'\l'0.438i'
-.sp -1
-\h'0.963i'\v'3.558i'\D'l0.100i -0.025i'
-.sp -1
-\h'0.963i'\v'3.508i'\D'l0.100i 0.025i'
-.sp -1
-\h'3.062i'\v'4.346i'\D'l1.625i 0.163i'
-.sp -1
-\h'4.585i'\v'4.524i'\D'l0.102i -0.015i'
-.sp -1
-\h'4.590i'\v'4.474i'\D'l0.097i 0.035i'
-.sp -1
-\h'4.875i'\v'0.034i'\v'-.13m'\L'4.687i\(br'\v'.13m'
-.sp -1
-\h'3.062i'\v'4.146i'\D'l1.688i 0.187i'
-.sp -1
-\h'4.648i'\v'4.347i'\D'l0.102i -0.014i'
-.sp -1
-\h'4.653i'\v'4.297i'\D'l0.097i 0.036i'
-.sp -1
-\h'3.062i'\v'2.871i'\D'l1.750i 0.212i'
-.sp -1
-\h'4.710i'\v'3.096i'\D'l0.102i -0.013i'
-.sp -1
-\h'4.716i'\v'3.046i'\D'l0.096i 0.037i'
-.sp -1
-\h'1.250i'\v'0.881i'\h'-0.0m'\v'0.2m'\s10\fRXNextEvent\fP
-.sp -1
-\h'1.250i'\v'1.068i'\h'-0.0m'\v'0.2m'\s10\fRXFilterEvent\fP
-.sp -1
-\h'4.875i'\h'-0.0m'\v'0.2m'\s12\fRIM Server\fP
-.sp -1
-\h'2.437i'\h'-0.0m'\v'0.2m'\s12\fRIM library\fP
-.sp -1
-\h'1.250i'\h'-0.0m'\v'0.2m'\s12\fRXlib API\fP
-.sp -1
-\h'3.187i'\v'0.881i'\h'-0.0m'\v'0.2m'\s10\fRXIM_FORWARD_EVENT\fP
-.sp -1
-\h'5.000i'\v'0.881i'\h'-0.0m'\v'0.2m'\s10\fRsynchronous \fP
-.sp -1
-\h'5.000i'\v'1.006i'\h'-0.0m'\v'0.2m'\s10\fRrequest\fP
-.sp -1
-\h'0.062i'\v'0.881i'\h'-0.0m'\v'0.2m'\s10\fRKey event\fP
-.sp -1
-\h'3.187i'\v'1.131i'\h'-0.0m'\v'0.2m'\s10\fR(synchronous) \fP
-.sp -1
-\h'0.062i'\v'1.256i'\h'-0.0m'\v'0.2m'\s10\fRButton press causes\fP
-.sp -1
-\h'0.062i'\v'1.381i'\h'-0.0m'\v'0.2m'\s10\fRfocus change\fP
-.sp -1
-\h'1.250i'\v'1.381i'\h'-0.0m'\v'0.2m'\s10\fRXSetICFocus\fP
-.sp -1
-\h'3.250i'\v'1.006i'\h'-0.0m'\v'0.2m'\s10\fRor XIM_COMMIT\fP
-.sp -1
-\h'3.187i'\v'1.443i'\h'-0.0m'\v'0.2m'\s10\fRXIM_FORWARD_EVENT\fP
-.sp -1
-\h'3.687i'\v'1.693i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SYNC\fP
-.sp -1
-\h'3.375i'\v'2.006i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SYNC_REPLY\fP
-.sp -1
-\h'1.250i'\v'2.193i'\h'-0.0m'\v'0.2m'\s10\fRXNextEvent\fP
-.sp -1
-\h'1.250i'\v'2.568i'\h'-0.0m'\v'0.2m'\s10\fRXmbLookupString\fP
-.sp -1
-\h'1.250i'\v'2.381i'\h'-0.0m'\v'0.2m'\s10\fRXFilterEvent (returns False) \fP
-.sp -1
-\v'2.856i'\h'-0.0m'\v'0.2m'\s10\fRthe focus\fP
-.sp -1
-\v'2.693i'\h'-0.0m'\v'0.2m'\s10\fRApplication moves\fP
-.sp -1
-\h'5.000i'\v'3.068i'\h'-0.0m'\v'0.2m'\s10\fRprocessed\fP
-.sp -1
-\h'5.000i'\v'3.193i'\h'-0.0m'\v'0.2m'\s10\fR(The focused\fP
-.sp -1
-\h'5.000i'\v'3.318i'\h'-0.0m'\v'0.2m'\s10\fRIC is changed) \fP
-.sp -1
-\h'5.000i'\v'3.568i'\h'-0.0m'\v'0.2m'\s10\fRprocessed\fP
-.sp -1
-\h'3.125i'\v'3.568i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SYNC_REPLY as a reply\fP
-.sp -1
-\h'3.125i'\v'3.731i'\h'-0.0m'\v'0.2m'\s10\fRof the XIM_FORWARD_EVENT\fP
-.sp -1
-\h'1.250i'\v'3.568i'\h'-0.0m'\v'0.2m'\s10\fRXNextEvent\fP
-.sp -1
-\h'5.000i'\v'4.068i'\h'-0.0m'\v'0.2m'\s10\fRprocessed\fP
-.sp -1
-\h'5.000i'\v'1.381i'\h'-0.0m'\v'0.2m'\s10\fRPending\fP
-.sp -1
-\h'5.000i'\v'4.256i'\h'-0.0m'\v'0.2m'\s10\fRprocessed\fP
-.sp -1
-\h'1.250i'\v'2.818i'\h'-0.0m'\v'0.2m'\s10\fRXSetICFocus\fP
-.sp -1
-\h'3.125i'\v'2.443i'\h'-0.0m'\v'0.2m'\s10\fRis started by XIM_COMMIT\fP
-.sp -1
-\h'3.125i'\v'2.193i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SET_IC_FOCUS is\fP
-.sp -1
-\h'3.125i'\v'2.318i'\h'-0.0m'\v'0.2m'\s10\fRpend because another sync cycle\fP
-.sp -1
-\h'2.062i'\v'1.693i'\h'-0.0m'\v'0.2m'\s10\fRsync cycle is done\fP
-.sp -1
-\h'2.062i'\v'1.568i'\h'-0.0m'\v'0.2m'\s10\fRPending until\fP
-.sp -1
-\v'3.568i'\h'-0.0m'\v'0.2m'\s10\fRKey event\fP
-.sp -1
-\h'1.250i'\v'3.756i'\h'-0.0m'\v'0.2m'\s10\fRXFilterEvent\fP
-.sp -1
-\h'3.125i'\v'4.631i'\h'-0.0m'\v'0.2m'\s10\fRXIM_FORWARD_EVENT\fP
-.sp -1
-\h'3.375i'\v'4.131i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SET_IC_FOCUS\fP
-.sp -1
-\h'3.250i'\v'2.818i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SET_IC_FOCUS\fP
-.sp -1
-.sp 1+4.721i
-.PE
-.if \n(00 .fi
-
-.\"====================== event2 flow figure end =======================
-.ce
-.sp
-Fig.3 Sample Protocol Flow chart
-.LP
-.LP
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_FORWARD_EVENT (IM library \(<-\(-> IM Server)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-:2:BITMASK16:flag
-::#0001:synchronous
-::#0002:request filtering (*1)
-::#0004:request lookupstring (*2)
-:2:CARD16:serial number
-::XEVENT:X event
-.TE
-.LP
-.IP (*1)
-Indicate the receiver should filter events and possible preedit may be invoked.
-.IP (*2)
-Indicate the receiver should only do lookup string. The IM Server is expected
-to just do a conversion of the key event to the best candidate. This bit may
-affect the state of the preedit state (e.g. compose of dead key sequences).
-.RE
-.LP
-XEVENT format is same as the X Protocol event format(xEvent).
-As the value of xEvent's sequenceNumber is the bottom of 16 bit of XEvent's
-xany.serial, the top of 16 bit is sent by serial number(INT16).
-.LP
-.PN XIM_FORWARD_EVENT
-message is used for forwarding the events from the IM library to the IM Server
-in order for IM to be able to filter the event. On the other hand, this
-message is also used for forwarding the events from the IM Server to the IM
-library if the event forwarded from the IM library is not filtered.
-The IM Server, which receives
-.PN XIM_FORWARD_EVENT
-message without synchronous bit, should set synchronous bit.
-If both ``request event filtering'' and ``request lookupstring'' flag are
-set, then both filtering and lookup should be done for the same event.
-.LP
-.NH 2
-Synchronizing with the IM Server
-.XS
-\*(SN Synchronizing with the IM Server
-.XE
-.LP
-.PN XIM_SYNC
-message requests to synchronize the IM library and the IM Server.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_SYNC (IM library \(<-\(-> IM Server)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-.TE
-.RE
-.LP
-This synchronization can be started either on the IM library side or on the
-IM Server side. The side which receives
-.PN XIM_SYNC
-message should process all XIM requests before replying. The input-context-ID
-is necessary to distinguish the IC with which the IM library and the IM
-Server are synchronized.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_SYNC_REPLY (IM Server \(<-\(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-.TE
-.RE
-.LP
-The side which receives
-.PN XIM_FORWARD_EVENT,
-.PN XIM_COMMIT
-or any other message with synchronous bit, should process all XIM request
-before replying, and send
-.PN XIM_SYNC_REPLY
-message as the reply to the previous message.
-.LP
-.NH 2
-Sending a committed string
-.XS
-\*(SN Sending a committed string
-.XE
-.LP
-When the IM Server commits a string, the IM Server sends either the committed
-string or list of KeySym, or both, by
-.PN XIM_COMMIT
-message.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_COMMIT (IM Server \(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-:2:BITMASK16:flag
-::#0001:synchronous
-::#0002:XLookupChars
-::#0004:XLookupKeySym
-::#0006: XLookupBoth = XLookupChars | XLookupKeySym
-.TE
-.LP
-If flag is XLookupKeySym, the arguments continue as follows:
-.TS
-tab(:);
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-:2::unused
-:4:KEYSYM:KeySym
-.TE
-.LP
-If flag is XLookupChars, the arguments continue as follows:
-.TS
-tab(:);
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-:2:m:byte length of committed string
-:m:LISTofBYTE:committed string
-:p::unused, p = Pad(m)
-.TE
-.LP
-If flag is XLookupBoth, the arguments continue as follows:
-.TS
-tab(:);
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-:2::unused
-:4:KEYSYM:KeySym
-:2:n:byte length of committed string
-:n:LISTofBYTE:committed string
-:p::unused, p = Pad(2+n)
-.TE
-.RE
-.LP
-The IM Server which receives
-.PN XIM_COMMIT
-message without synchronous bit should set synchronous bit.
-.LP
-.NH 2
-Reset IC
-.XS
-\*(SN Reset IC
-.XE
-.LP
-.PN XIM_RESET_IC
-message requests to reset the status of IC in the IM Server.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_RESET_IC (IM library \(-> IM Server)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-.TE
-.RE
-.LP
-.PN XIM_RESET_IC
-is a synchronous request. The IM library should wait until receiving either an
-.PN XIM_RESET_IC_REPLY
-packet or an
-.PN XIM_ERROR
-packet.
-.LP
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_RESET_IC_REPLY (IM Server \(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-:2:n:byte length of preedit string
-:n:LISTofBYTE:preedit string
-:p::unused, p = Pad(2+n)
-.TE
-.RE
-.LP
-.PN XIM_RESET_IC_REPLY
-message returns the input-context-ID to distinguish replies from multiple ICs.
-.LP
-.\"============================== Callbacks ===============================
-.NH 2
-Callbacks
-.XS
-\*(SN Callbacks
-.XE
-.LP
-If XIMStyle has XIMPreeditArea or XIMStatusArea set, XIMGeometryCallback
-may be used, and if XIMPreeditCallback and/or XIMStatusCallback are set,
-corresponding callbacks may be used.
-.LP
-Any callback request may be sent from an IM Server to an IM client
-asynchronously in response to any request previously sent by the IM client
-to the IM Server.
-.LP
-When an IM Server needs to send a callback request synchronously with
-the request previously sent by an IM client, the IM Server sends it
-before replying to the previous request.
-.LP
-.NH 3
-Negotiating geometry
-.XS
-\*(SN Negotiating geometry
-.XE
-.LP
-The IM Server sends
-.PN XIM_GEOMETRY
-message to start geometry negotiation, if XIMStyle has XIMPreeditArea or
-XIMStatusArea set.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_GEOMETRY (IM Server \(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-.TE
-.RE
-.LP
-There is always a single Focus Window, even if some input fields have only
-one IC.
-.LP
-.NH 3
-Converting a string
-.XS
-\*(SN Converting a string
-.XE
-.LP
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_STR_CONVERSION (IM Server \(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-:2:CARD16:XIMStringConversionPosition
-:2::unused
-:4:CARD32:XIMCaretDirection
-::#0:XIMForwardChar
-::#1:XIMBackwardChar
-::#2:XIMForwardWord
-::#3:XIMBackwardWord
-::#4:XIMCaretUp
-::#5:XIMCaretDown
-::#6:XIMNextLine
-::#7:XIMCPreviousLine
-::#8:XIMLineStart
-::#9:XIMLineEnd
-::#10:XIMAbsolutePosition
-::#11:XIMDontChange
-:2:CARD16:factor
-:2:CARD16:XIMStringConversionOperation
-::#0001:XIMStringConversionSubstitution
-::#0002:XIMStringConversionRetrieval
-:2:INT16:T{
-byte length to multiply the XIMStringConversionType
-T}
-.TE
-.RE
-.sp
-.LP
-.PN XIM_STR_CONVERSION
-message may be used to start the string conversion from the IM
-Server.
-.LP
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_STR_CONVERSION_REPLY (IM library \(-> IM Server)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-:4:CARD32:XIMStringConversionFeedback
-::XIMSTRCONVTEXT:XIMStringConversionText
-.sp
-.TE
-.RE
-.LP
-.PN XIM_STR_CONVERSION_REPLY
-message returns the string to be converted and the feedback information array.
-.LP
-.NH 3
-Preedit Callbacks
-.XS
-\*(SN Preedit Callbacks
-.XE
-.LP
-The IM Server sends
-.PN XIM_PREEDIT_START
-message to call the XIMPreeditStartCallback function.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_PREEDIT_START (IM Server \(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-.TE
-.RE
-.LP
-The reply to this message must be sent synchronously. The reply forwards
-the return value from the callback function to the IM Server.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_PREEDIT_START_REPLY (IM library \(-> IM Server)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-:4:INT32:return value
-.TE
-.RE
-.LP
-.PN XIM_PREEDIT_START_REPLY
-message returns the input-context-ID to distinguish replies from multiple
-IC's. The return value contains the return value of the function
-XIMPreeditStartCallback.
-.LP
-The IM Server sends
-.PN XIM_PREEDIT_DRAW
-message to call the XIMPreeditDrawCallback function.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_PREEDIT_DRAW (IM Server \(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-:4:INT32:caret
-:4:INT32:chg_first
-:4:INT32:chg_length
-:4:BITMASK32:status
-::#x0000001:no string
-::#x0000002:no feedback
-:2:n:length of preedit string
-:n:STRING8:preedit string
-:p::unused, p = Pad(2+n)
-:2:m:byte length of feedback array
-:2::unused
-:m:LISTofXIMFEEDBACK:feedback array
-.TE
-.RE
-.LP
-The fields ``caret'', ``chg_first'' and ``chg_length'' correspond to the
-fields of XIMPreeditDrawCallbackStruct.
-When the ``no string'' bit of the status field is set, the text field of
-XIMPreeditDrawCallbackStruct is NULL.
-When the ``no feedback'' bit of the status field is set, the text feedback
-field of XIMPreeditDrawCallbackStruct is NULL.
-When the above bits are not set, ``preedit string'' contains the preedit
-string to be displayed, and the feedback array contains feedback information.
-.LP
-The IM Server sends
-.PN XIM_PREEDIT_CARET
-message to call the PreeditCaretCallback function.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_PREEDIT_CARET (IM Server \(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-:4:INT32:position
-:4:CARD32:direction
-::#0:XIMForwardChar
-::#1:XIMBackwardChar
-::#2:XIMForwardWord
-::#3:XIMBackwardWord
-::#4:XIMCaretUp
-::#5:XIMCaretDown
-::#6:XIMNextLine
-::#7:XIMCPreviousLine
-::#8:XIMLineStart
-::#9:XIMLineEnd
-::#10:XIMAbsolutePosition
-::#11:XIMDontChange
-:4:CARD32:style
-::#0:XIMInvisible
-::#1:XIMCPrimary
-::#2:XIMSecondary
-.TE
-.RE
-.LP
-Each entry corresponds to a field of XIMPreeditCaretCallbackStruct.
-Since this callback sets the caret position, its reply must be sent
-synchronously.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_PREEDIT_CARET_REPLY (IM library \(-> IM Server)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-:4:CARD32:position
-.TE
-.RE
-.LP
-The position is the value returned by the callback function after it
-has been called.
-.LP
-The IM Server sends
-.PN XIM_PREEDIT_DONE
-message to call the XIMPreeditDoneCallback function.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_PREEDIT_DONE (IM Server \(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-.TE
-.RE
-.LP
-.NH 3
-Preedit state notify
-.XS
-\*(SN Preedit state notify
-.XE
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_PREEDITSTATE (IM Server \(-> IM Library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-:4:BITMASK32:XIMPreeditState
-::#x0000000:XIMPreeditUnknown
-::#x0000001:XIMPreeditEnable
-::#x0000002:XIMPreeditDisable
-.TE
-.sp
-.TE
-.RE
-.LP
-.PN XIM_PREEDITSTATE
-message is used to call the XIMPreeditStateNotifyCallback function.
-.LP
-.NH 3
-Status Callbacks
-.XS
-\*(SN Status Callbacks
-.XE
-.LP
-The IM Server sends
-.PN XIM_STATUS_START
-message to call the XIMStatusStartCallback function.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_STATUS_START (IM Server \(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-.TE
-.RE
-.LP
-The IM Server sends
-.PN XIM_STATUS_DRAW
-message to call the XIMStatusDrawCallback function.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_STATUS_DRAW (IM Server \(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-:4:CARD32:type
-::#0:XIMTextType
-::#1:XIMBitmapType
-.TE
-.LP
-If type is XIMTextType, the arguments continue as follows.
-.TS
-tab(:);
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-:4:BITMASK32:status
-::#x0000001:no string
-::#x0000002:no feedback
-:2:n:length of status string
-:n:STRING8:status string
-:p::unused, p = Pad(2+n)
-:2:m:byte length of feedback array
-:2::unused
-:m:LISTofXIMFEEDBACK:feedback array
-.TE
-.LP
-If type is XIMBitmapType, the arguments continue as follows.
-.TS
-tab(:);
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-:4:PIXMAP:pixmap data
-.TE
-.RE
-.LP
-The field ``type'' corresponds to the field in XIMStatusDrawCallbackStruct.
-.LP
-The IM Server sends
-.PN XIM_STATUS_DONE
-message to call the XIMStatusDoneCallback function.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_STATUS_DONE (IM Server \(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-.TE
-.RE
-.LP
-.bp
-.NH 1
-Acknowledgements
-.XS
-\*(SN Acknowledgements
-.XE
-.LP
-This document represents the culmination of several years of debate and
-experiments done under the auspices of the MIT X Consortium i18n working
-group. Although this was a group effort, the author remains responsible
-for any errors or omissions.
-.LP
-We would like to thank to all members of this group.
-And we would like to make special thanks to the following people
-(in alphabetical order) for their participation in the IM Protocol
-design,
-Hector Chan, Takashi Fujiwara, Yoshio Horiuchi, Makoto Inada,
-Hiromu Inukai, Mickael Kung, Seiji Kuwari, Franky Ling, Hiroyuki Machida,
-Hiroyuki Miyamoto, Frank Rojas, Bob Scheifler, Makiko Shimamura,
-Shoji Sugiyama, Hidetoshi Tajima, Masaki Takeuchi, Makoto Wakamatsu,
-Masaki Wakao, Nobuyuki Tanaka, Shigeru Yamada, Katsuhisa Yano, Jinsoo Yoon.
-.LP
-.NH 1
-References
-.XS
-\*(SN References
-.XE
-.LP
-All of the following documents are X Consortium standards available from MIT:
-.LP
-[1] Scheifler, Robert W., \fI``X Window System Protocol Version 11''\fP
-.LP
-[2] Scheifler, Robert W. etc., \fI``Xlib \- C Language X Interface''\fP
-.LP
-.bp
-.XS
-Appendix A \- Common Extensions
-.XE
-.ce 10
-.sp 5
-\s+2\fBAppendix A\fP\s-2
-.sp
-\s+1\fBCommon Extensions\fP\s-1
-.ce 0
-.sp
-.LP
-Extension opcodes and packet names (e.g.
-.PN XIM_EXT_SET_EVENT_MASK
-) for additional extensions may be registered with X Consortium.
-The following is a commonly well-known extended packet.
-.LP
-.LP
-.IP \fB(1)
-Extension to manipulate the event handling\fP
-.LP
-.PN XIM_EXT_SET_EVENT_MASK
-message specifies the set of event masks that the IM library should manipulate.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_EXT_SET_EVENT_MASK (IM Server \(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-:4:EVENTMASK:filter-event-mask (*1)
-:4:EVENTMASK:intercept-event-mask (*2)
-:4:EVENTMASK:select-event-mask (*3)
-:4:EVENTMASK:forward-event-mask (*4)
-:4:EVENTMASK:synchronous-event-mask (*5)
-.TE
-.IP (*1)
-Specify the events to be neglected by the IM library via XFilterEvent.
-.IP (*2)
-Specify the events to be deselected by the IM library with XSelectInput.
-.IP (*3)
-Specify the events to be selected by the IM library with XSelectInput.
-.IP (*4)
-Specify all the events to be forwarded to the IM Server by the IM library.
-.IP (*5)
-Specify the events to be forwarded with synchronous flag on by the IM library.
-.RE
-.LP
-The IM library must reply
-.PN XIM_SYNC_REPLY
-message to the IM Server. This request is valid after the ic is created.
-.LP
-.sp
-.IP \fB(2)
-Extension for improvement of performance\fR
-.LP
-The following requests may be used for improvement of performance.
-.LP
-.PN XIM_EXT_FORWARD_KEYEVENT
-message may be used instead of
-.PN XIM_FORWARD_EVENT
-message.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_EXT_FORWARD_KEYEVENT (IM Server \(<-\(-> IM library)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-:2:BITMASK16:flag
-::#0001:synchronous
-:2:CARD16:sequence number
-:1:BYTE:xEvent.u.u.type
-:1:BYTE:keycode
-:2:CARD16:state
-:4:CARD32:time
-:4:CARD32:window
-.TE
-.RE
-.LP
-.bp
-.PN XIM_EXT_MOVE
-message may be used to change the spot location instead of
-.PN
-XIM_SET_IC_VALUES
-message.
-It is effective only if the client specified XIMPreeditPosition.
-.RS
-.TS
-tab(:);
-lfB s s s
-lw(.25i) lw(.25i) lw(1.75i) lw(3.5i).
-XIM_EXT_MOVE (IM library \(-> IM Server)
-.sp 6p
-:2:CARD16:input-method-ID
-:2:CARD16:input-context-ID
-:2:INT16:X
-:2:INT16:Y
-.TE
-.RE
-.LP
-.PN XIM_EXT_MOVE
-message is a asynchronous request.
-.LP
-.bp
-.XS
-Appendix B \- The list of transport specific IM Server names registered
-.XE
-.ce 10
-.sp 5
-\s+2\fBAppendix B\fP\s-2
-.sp
-\s+1\fBThe list of transport specific IM Server address format registered\fP\s-1
-.ce 0
-.sp
-.LP
-The following format represents the ATOM contained in
-.PN XIM_SERVERS
-property and the string returned from the request converting
-selection target LOCALES and TRANSPORT.
-.DS
- ``{@\^\fIcategory\fP\^=[\^\fIvalue\fP,...]}...''
-.DE
-.LP
-The following categories are currently registered.
-.RS
-.TS
-tab(;);
-l l.
-\fBserver\fP;: IM Server name (used for XIM_SERVERS)
-\fBlocale\fP;: XPG4 locale name (LOCALES)
-\fBtransport\fP;: transport-specific name (TRANSPORT)
-.TE
-.RE
-.LP
-The preregistered formats for transport-specific names are as follows:
-.RS
-.LP
-\fBTCP/IP Names\fP
-.LP
-.RS
-The following syntax should be used for system internal domain names:
-.DS
-<\fIlocal name\fP> ::= ``local/''<\fIhostname\fP>``:''<\fIpathname\fP>
-.DE
-.LP
-Where <\fIpathname\fP> is a path name of socket address.
-.LP
-IM Server's name should be set to <\fIpathname\fP> to run multiple IM Server
-at the same time
-.LP
-The following syntax should be used for Internet domain names:
-.DS
-<\fITCP name\fP> ::= ``tcp/''<\fIhostname\fP>``:''<\fIipportnumber\fP>
-.DE
-where <\fIhostname\fP> is either symbolic (such as expo.lcs.mit.edu) or
-numeric decimal (such as 18.30.0.212). The <\fIipportnumber\fP> is the
-port on which the IM Server is listening for connections.
-For example:
-.DS
-tcp/expo.lcs.mit.edu:8012
-tcp/18.30.0.212:7890
-.DE
-.RE
-.LP
-\fBDECnet Names\fP
-.LP
-.RS
-The following syntax should be used for DECnet names:
-.DS
-<\fIDECnet name\fP> ::= ``decnet/''<\fInodename\fP>``::IMSERVER$''<\fIobjname\fP>
-.DE
-where <\fInodename\fP> is either symbolic (such as SRVNOD) or the numeric
-decimal form of the DECnet address (such as 44.70). The <\fIobjname\fP>
-is normal, case-insensitive DECnet object name. For example:
-.DS
-DECNET/SRVNOD::IMSERVER$DEFAULT
-decnet/44.70::IMSERVER$other
-.DE
-.RE
-.LP
-\fBX Names\fP
-.LP
-.RS
-The following syntax should be used for X names:
-.DS
-<\fIX name\fP> ::= ``X/''
-.DE
-.RE
-.RE
-.LP
-If a given category has multiple values, the value is evaluated in order of
-setting.
-.bp
-.XS
-Appendix C \- Protocol number
-.XE
-.ce 10
-.sp 5
-\s+2\fBAppendix C\fP\s-2
-.sp
-\s+1\fBProtocol number\fP\s-1
-.ce 0
-.sp
-.LP
-\fBMajor Protocol number\fP
-.TS
-center, tab(:);
-lw(9c) l.
-XIM_CONNECT:#001
-XIM_CONNECT_REPLY:#002
-XIM_DISCONNECT:#003
-XIM_DISCONNECT_REPLY:#004
-
-XIM_AUTH_REQUIRED:#010
-XIM_AUTH_REPLY:#011
-XIM_AUTH_NEXT:#012
-XIM_AUTH_SETUP:#013
-XIM_AUTH_NG:#014
-
-XIM_ERROR:#020
-
-XIM_OPEN:#030
-XIM_OPEN_REPLY:#031
-XIM_CLOSE:#032
-XIM_CLOSE_REPLY:#033
-XIM_REGISTER_TRIGGERKEYS:#034
-XIM_TRIGGER_NOTIFY:#035
-XIM_TRIGGER_NOTIFY_REPLY:#036
-XIM_SET_EVENT_MASK:#037
-XIM_ENCODING_NEGOTIATION:#038
-XIM_ENCODING_NEGOTIATION_REPLY:#039
-XIM_QUERY_EXTENSION:#040
-XIM_QUERY_EXTENSION_REPLY:#041
-XIM_SET_IM_VALUES:#042
-XIM_SET_IM_VALUES_REPLY:#043
-XIM_GET_IM_VALUES:#044
-XIM_GET_IM_VALUES_REPLY:#045
-
-XIM_CREATE_IC:#050
-XIM_CREATE_IC_REPLY:#051
-XIM_DESTROY_IC:#052
-XIM_DESTROY_IC_REPLY:#053
-XIM_SET_IC_VALUES:#054
-XIM_SET_IC_VALUES_REPLY:#055
-XIM_GET_IC_VALUES:#056
-XIM_GET_IC_VALUES_REPLY:#057
-XIM_SET_IC_FOCUS:#058
-XIM_UNSET_IC_FOCUS:#059
-XIM_FORWARD_EVENT:#060
-XIM_SYNC:#061
-XIM_SYNC_REPLY:#062
-XIM_COMMIT:#063
-XIM_RESET_IC:#064
-XIM_RESET_IC_REPLY:#065
-
-XIM_GEOMETRY:#070
-XIM_STR_CONVERSION:#071
-XIM_STR_CONVERSION_REPLY:#072
-XIM_PREEDIT_START:#073
-XIM_PREEDIT_START_REPLY:#074
-XIM_PREEDIT_DRAW:#075
-XIM_PREEDIT_CARET:#076
-XIM_PREEDIT_CARET_REPLY:#077
-XIM_PREEDIT_DONE:#078
-XIM_STATUS_START:#079
-XIM_STATUS_DRAW:#080
-XIM_STATUS_DONE:#081
-XIM_PREEDITSTATE:#082
-.TE
-.sp
-(*) The IM Server's extension protocol number should be more than #128.
-.bp
-.XS
-Appendix D \- Implementation Tips
-.XE
-.ce 10
-.sp 5
-\s+2\fBAppendix D\fP\s-2
-.sp
-\s+1\fBImplementation Tips\fP\s-1
-.ce 0
-.sp
-.LP
-.B
-.IP \fB(1)
-FrontEnd Method\fP
-.LP
-FrontEnd method is recognized as a performance acceleration by the
-trade off of the variety of the reliability.
-.LP
-In order to use the FrontEnd method, the IM library must query the IM
-Server to see if the FrontEnd extension is available. The query is
-made by using the
-.PN XIM_QUERY_EXTENSION
-message. The IM Server may send
-.PN XIM_EXT_SET_EVENT_MASK
-message with intercept-event-mask, forward-event-mask, and
-synchronous-event-mask values set after replying
-.PN XIM_QUERY_EXTENSION_REPLY
-message.
-.LP
-FrontEnd method can be implemented in a couple of ways depending on
-how the IM Server utilize
-.PN XIM_EXT_SET_EVENT_MASK
-message.
-.LP
-One approach is to update both of the input mask and the filter-event-mask
-depending on the preeidting state. The sample protocol sequence using the
-static event flow is as follows:
-.LP
-.\"===================================================================
-.sp
-\^... 1.675 6.888 6.237 10.296
-\^... 0.000i 3.408i 4.562i 0.000i
-.nr 00 \n(.u
-.nf
-.PS 3.408i 4.562i
-.br
-.ps 11
-\h'3.750i'\v'0.034i'\v'-.13m'\L'3.374i\(br'\v'.13m'
-.sp -1
-\h'3.912i'\v'1.384i'\D'l-0.100i 0.025i'
-.sp -1
-\h'3.912i'\v'1.434i'\D'l-0.100i -0.025i'
-.sp -1
-\h'3.812i'\v'1.409i'\l'0.750i'
-.sp -1
-\h'3.750i'\h'-0.0m'\v'0.2m'\s12\fRIM Server\fP
-.sp -1
-\h'3.812i'\v'0.818i'\h'-0.0m'\v'0.2m'\s10\fRevent mask is changed\fP
-.sp -1
-\h'3.812i'\v'1.006i'\h'-0.0m'\v'0.2m'\s10\fRto select the event\fP
-.sp -1
-\h'3.875i'\v'2.381i'\h'-0.0m'\v'0.2m'\s10\fRevent mask is changed\fP
-.sp -1
-\h'3.875i'\v'2.568i'\h'-0.0m'\v'0.2m'\s10\fRto deselect the event\fP
-.sp -1
-\h'3.875i'\v'1.631i'\h'-0.0m'\v'0.2m'\s10\fRX events directly come\fP
-.sp -1
-\h'3.875i'\v'1.756i'\h'-0.0m'\v'0.2m'\s10\fRto the IM Server.\fP
-.sp -1
-\h'3.875i'\v'2.006i'\h'-0.0m'\v'0.2m'\s10\fRwhen preediting is turning off\fP
-.sp -1
-\h'0.625i'\v'0.284i'\l'0.875i'
-.sp -1
-\h'1.400i'\v'0.309i'\D'l0.100i -0.025i'
-.sp -1
-\h'1.400i'\v'0.259i'\D'l0.100i 0.025i'
-.sp -1
-\h'1.750i'\v'0.346i'\l'1.687i'
-.sp -1
-\h'3.337i'\v'0.371i'\D'l0.100i -0.025i'
-.sp -1
-\h'3.337i'\v'0.321i'\D'l0.100i 0.025i'
-.sp -1
-\h'1.850i'\v'2.134i'\D'l-0.100i 0.025i'
-.sp -1
-\h'1.850i'\v'2.184i'\D'l-0.100i -0.025i'
-.sp -1
-\h'1.750i'\v'2.159i'\l'1.687i'
-.sp -1
-\h'1.562i'\v'0.034i'\v'-.13m'\L'3.374i\(br'\v'.13m'
-.sp -1
-\h'1.850i'\v'0.446i'\D'l-0.100i 0.025i'
-.sp -1
-\h'1.850i'\v'0.496i'\D'l-0.100i -0.025i'
-.sp -1
-\h'1.750i'\v'0.471i'\l'1.687i'
-.sp -1
-\h'1.687i'\v'0.631i'\h'-0.0m'\v'0.2m'\s10\fRXIM_EXT_SET_EVENT_MASK\fP
-.sp -1
-\h'1.875i'\v'0.818i'\h'-0.0m'\v'0.2m'\s10\fRintercept-event-mask is set\fP
-.sp -1
-\h'1.687i'\v'2.318i'\h'-0.0m'\v'0.2m'\s10\fRXIM_EXT_SET_EVENT_MASK\fP
-.sp -1
-\h'1.875i'\v'2.443i'\h'-0.0m'\v'0.2m'\s10\fRselect-event-mask is set\fP
-.sp -1
-\h'0.937i'\h'-0.0m'\v'0.2m'\s12\fRIM library\fP
-.sp -1
-\v'0.193i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the on-key-list\fP
-.sp -1
-\h'0.250i'\v'2.318i'\h'-0.0m'\v'0.2m'\s10\fRevent mask is changed\fP
-.sp -1
-\h'0.250i'\v'2.506i'\h'-0.0m'\v'0.2m'\s10\fRto select the event\fP
-.sp -1
-\h'0.250i'\v'1.006i'\h'-0.0m'\v'0.2m'\s10\fRto deselect the event\fP
-.sp -1
-\h'0.250i'\v'0.818i'\h'-0.0m'\v'0.2m'\s10\fRevent mask is changed\fP
-.sp -1
-\h'1.812i'\v'0.256i'\h'-0.0m'\v'0.2m'\s10\fRXIM_FORWARD_EVENT\fP
-.sp -1
-.sp 1+3.408i
-.PE
-.if \n(00 .fi
-.sp
-.\"===================================================================
-.LP
-To pursuit a maximum performance regardless of the preediting mode,
-the IM Server may use the dynamic event flow with the following
-sample protocol sequence.
-.bp
-.LP
-.\"===================================================================
-\^... 1.675 6.888 6.237 10.296
-\^... 0.000i 3.408i 4.562i 0.000i
-.nr 00 \n(.u
-.nf
-.PS 3.408i 4.562i
-.br
-.ps 11
-\h'3.750i'\v'0.034i'\v'-.13m'\L'3.374i\(br'\v'.13m'
-.sp -1
-\h'3.912i'\v'1.384i'\D'l-0.100i 0.025i'
-.sp -1
-\h'3.912i'\v'1.434i'\D'l-0.100i -0.025i'
-.sp -1
-\h'3.812i'\v'1.409i'\l'0.750i'
-.sp -1
-\h'3.750i'\h'-0.0m'\v'0.2m'\s12\fRIM Server\fP
-.sp -1
-\h'3.812i'\v'0.818i'\h'-0.0m'\v'0.2m'\s10\fRevent mask is changed\fP
-.sp -1
-\h'3.812i'\v'1.006i'\h'-0.0m'\v'0.2m'\s10\fRto select the event\fP
-.sp -1
-\h'3.875i'\v'2.381i'\h'-0.0m'\v'0.2m'\s10\fRevent mask is changed\fP
-.sp -1
-\h'3.875i'\v'2.568i'\h'-0.0m'\v'0.2m'\s10\fRto deselect the event\fP
-.sp -1
-\h'3.875i'\v'1.631i'\h'-0.0m'\v'0.2m'\s10\fRX events directly come\fP
-.sp -1
-\h'3.875i'\v'1.756i'\h'-0.0m'\v'0.2m'\s10\fRto the IM Server.\fP
-.sp -1
-\h'3.875i'\v'2.006i'\h'-0.0m'\v'0.2m'\s10\fRwhen preediting is turning off\fP
-.sp -1
-\h'0.625i'\v'0.284i'\l'0.875i'
-.sp -1
-\h'1.400i'\v'0.309i'\D'l0.100i -0.025i'
-.sp -1
-\h'1.400i'\v'0.259i'\D'l0.100i 0.025i'
-.sp -1
-\h'1.750i'\v'0.346i'\l'1.687i'
-.sp -1
-\h'3.337i'\v'0.371i'\D'l0.100i -0.025i'
-.sp -1
-\h'3.337i'\v'0.321i'\D'l0.100i 0.025i'
-.sp -1
-\h'1.850i'\v'1.196i'\D'l-0.100i 0.025i'
-.sp -1
-\h'1.850i'\v'1.246i'\D'l-0.100i -0.025i'
-.sp -1
-\h'1.750i'\v'1.221i'\l'1.687i'
-.sp -1
-\h'1.850i'\v'2.134i'\D'l-0.100i 0.025i'
-.sp -1
-\h'1.850i'\v'2.184i'\D'l-0.100i -0.025i'
-.sp -1
-\h'1.750i'\v'2.159i'\l'1.687i'
-.sp -1
-\h'1.562i'\v'0.034i'\v'-.13m'\L'3.374i\(br'\v'.13m'
-.sp -1
-\h'1.850i'\v'0.446i'\D'l-0.100i 0.025i'
-.sp -1
-\h'1.850i'\v'0.496i'\D'l-0.100i -0.025i'
-.sp -1
-\h'1.750i'\v'0.471i'\l'1.687i'
-.sp -1
-\h'1.812i'\v'0.256i'\h'-0.0m'\v'0.2m'\s10\fRXIM_TRIGGER_NOTIFY\fP
-.sp -1
-\h'1.687i'\v'1.068i'\h'-0.0m'\v'0.2m'\s10\fRXIM_TRIGGER_NOTIFY_REPLY\fP
-.sp -1
-\h'1.687i'\v'0.631i'\h'-0.0m'\v'0.2m'\s10\fRXIM_EXT_SET_EVENT_MASK\fP
-.sp -1
-\h'1.875i'\v'0.818i'\h'-0.0m'\v'0.2m'\s10\fRintercept-event-mask is set\fP
-.sp -1
-\h'1.687i'\v'2.318i'\h'-0.0m'\v'0.2m'\s10\fRXIM_EXT_SET_EVENT_MASK\fP
-.sp -1
-\h'1.875i'\v'2.443i'\h'-0.0m'\v'0.2m'\s10\fRselect-event-mask is set\fP
-.sp -1
-\h'0.937i'\h'-0.0m'\v'0.2m'\s12\fRIM library\fP
-.sp -1
-\v'0.193i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the on-key-list\fP
-.sp -1
-\h'0.250i'\v'2.318i'\h'-0.0m'\v'0.2m'\s10\fRevent mask is changed\fP
-.sp -1
-\h'0.250i'\v'2.506i'\h'-0.0m'\v'0.2m'\s10\fRto select the event\fP
-.sp -1
-\h'0.250i'\v'1.006i'\h'-0.0m'\v'0.2m'\s10\fRto deselect the event\fP
-.sp -1
-\h'0.250i'\v'0.818i'\h'-0.0m'\v'0.2m'\s10\fRevent mask is changed\fP
-.sp -1
-.sp 1+3.408i
-.PE
-.if \n(00 .fi
-.\"===================================================================
-.LP
-This method can reduce the XIM protocol traffic dramatically
-by updating intercept-event-mask and select-event-mask accordingly.
-The tradeoff of this performance improvement is that the key
-events may be lost or disordered in some particular situation, such as
-when the user types the keyboard in following sequence really fast:
-.sp 6p
-.RS
-<preediting on key>``some strings''<preediting off key>``another string''
-.RE
-.sp 6p
-Since this method requires the input mask updates to the both the IM Server
-and Xlib when turning on and off the preediting, and there is a time lag
-till the requests take effect when two client issues the input mask updates
-simultaneously.
-.LP
-Another approach of the FrontEnd method is to update the filter-event-mask
-depending on the preediting state and not to update the input mask.
-The IM Server must register both of the preediting on key list and off key
-list by
-.PN XIM_REGISTER_TRIGGERKEYS
-message.
-In this method, Both the IM Server and the IM client select the same
-events on the same client's window, so that the events are delivered
-to both of the IM Server and the client. The preediting on and off
-states are expressed by whether the key events are filtered or not.
-The sample protocol sequence are as follows:
-.LP
-.bp
-<<Using static event flow>>
-.LP
-.\"====================================================================
-.sp
-\^... 1.488 7.325 6.487 10.358
-\^... 0.000i 3.033i 4.999i 0.000i
-.nr 00 \n(.u
-.nf
-.PS 3.033i 4.999i
-.br
-.ps 11
-\h'4.099i'\v'0.383i'\D'l-0.100i 0.025i'
-.sp -1
-\h'4.099i'\v'0.433i'\D'l-0.100i -0.025i'
-.sp -1
-\h'3.999i'\v'0.408i'\l'1.000i'
-.sp -1
-\h'4.099i'\v'1.696i'\D'l-0.100i 0.025i'
-.sp -1
-\h'4.099i'\v'1.746i'\D'l-0.100i -0.025i'
-.sp -1
-\h'3.999i'\v'1.721i'\l'1.000i'
-.sp -1
-\h'3.937i'\v'0.096i'\v'-.13m'\L'2.937i\(br'\v'.13m'
-.sp -1
-\h'3.937i'\v'0.062i'\h'-0.0m'\v'0.2m'\s12\fRIM Server\fP
-.sp -1
-\h'4.062i'\v'0.755i'\h'-0.0m'\v'0.2m'\s10\fRthe specified events\fP
-.sp -1
-\h'4.062i'\v'0.943i'\h'-0.0m'\v'0.2m'\s10\fRare being processed\fP
-.sp -1
-\h'4.062i'\v'2.255i'\h'-0.0m'\v'0.2m'\s10\fRthe specified events\fP
-.sp -1
-\h'4.062i'\v'2.443i'\h'-0.0m'\v'0.2m'\s10\fRare being discarded\fP
-.sp -1
-\h'4.249i'\v'1.568i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the off-key-list\fP
-.sp -1
-\h'4.187i'\v'0.318i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the on-key-list\fP
-.sp -1
-\h'0.812i'\v'0.346i'\l'0.875i'
-.sp -1
-\h'1.587i'\v'0.371i'\D'l0.100i -0.025i'
-.sp -1
-\h'1.587i'\v'0.321i'\D'l0.100i 0.025i'
-.sp -1
-\h'1.937i'\v'0.408i'\l'1.687i'
-.sp -1
-\h'3.524i'\v'0.433i'\D'l0.100i -0.025i'
-.sp -1
-\h'3.524i'\v'0.383i'\D'l0.100i 0.025i'
-.sp -1
-\h'1.749i'\v'0.096i'\v'-.13m'\L'2.937i\(br'\v'.13m'
-.sp -1
-\h'2.037i'\v'0.508i'\D'l-0.100i 0.025i'
-.sp -1
-\h'2.037i'\v'0.558i'\D'l-0.100i -0.025i'
-.sp -1
-\h'1.937i'\v'0.533i'\l'1.687i'
-.sp -1
-\h'0.812i'\v'1.721i'\l'0.875i'
-.sp -1
-\h'1.587i'\v'1.746i'\D'l0.100i -0.025i'
-.sp -1
-\h'1.587i'\v'1.696i'\D'l0.100i 0.025i'
-.sp -1
-\h'2.099i'\v'1.758i'\D'l-0.100i 0.025i'
-.sp -1
-\h'2.099i'\v'1.808i'\D'l-0.100i -0.025i'
-.sp -1
-\h'1.999i'\v'1.783i'\l'1.688i'
-.sp -1
-\h'1.874i'\v'0.693i'\h'-0.0m'\v'0.2m'\s10\fRXIM_EXT_SET_EVENT_MASK\fP
-.sp -1
-\v'0.255i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the on-key-list\fP
-.sp -1
-\h'2.062i'\v'0.880i'\h'-0.0m'\v'0.2m'\s10\fRfilter-event-mask is set\fP
-.sp -1
-\h'0.624i'\v'0.755i'\h'-0.0m'\v'0.2m'\s10\fRthe specified events\fP
-.sp -1
-\h'0.624i'\v'0.943i'\h'-0.0m'\v'0.2m'\s10\fRare being filtered\fP
-.sp -1
-\h'1.937i'\v'1.943i'\h'-0.0m'\v'0.2m'\s10\fRXIM_EXT_SET_EVENT_MASK\fP
-.sp -1
-\h'2.124i'\v'2.068i'\h'-0.0m'\v'0.2m'\s10\fRfilter-event-mask is set\fP
-.sp -1
-\h'0.062i'\v'1.568i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the off-key-list\fP
-.sp -1
-\h'1.062i'\h'-0.0m'\v'0.2m'\s12\fRIM library\fP
-.sp -1
-\h'0.624i'\v'2.255i'\h'-0.0m'\v'0.2m'\s10\fRthe specified events\fP
-.sp -1
-\h'0.624i'\v'2.443i'\h'-0.0m'\v'0.2m'\s10\fRare being processed\fP
-.sp -1
-\h'1.999i'\v'0.318i'\h'-0.0m'\v'0.2m'\s10\fRXIM_FORWARD_EVENT\fP
-.sp -1
-.sp 1+3.033i
-.PE
-.if \n(00 .fi
-.\"====================================================================
-.LP
-<<Using the dynamic event flow>>
-.LP
-.\"====================================================================
-\^... 1.488 7.325 6.487 10.358
-\^... 0.000i 3.033i 4.999i 0.000i
-.nr 00 \n(.u
-.nf
-.PS 3.033i 4.999i
-.br
-.ps 11
-\h'4.099i'\v'0.383i'\D'l-0.100i 0.025i'
-.sp -1
-\h'4.099i'\v'0.433i'\D'l-0.100i -0.025i'
-.sp -1
-\h'3.999i'\v'0.408i'\l'1.000i'
-.sp -1
-\h'4.099i'\v'1.696i'\D'l-0.100i 0.025i'
-.sp -1
-\h'4.099i'\v'1.746i'\D'l-0.100i -0.025i'
-.sp -1
-\h'3.999i'\v'1.721i'\l'1.000i'
-.sp -1
-\h'3.937i'\v'0.096i'\v'-.13m'\L'2.937i\(br'\v'.13m'
-.sp -1
-\h'3.937i'\v'0.062i'\h'-0.0m'\v'0.2m'\s12\fRIM Server\fP
-.sp -1
-\h'4.062i'\v'0.755i'\h'-0.0m'\v'0.2m'\s10\fRthe specified events\fP
-.sp -1
-\h'4.062i'\v'0.943i'\h'-0.0m'\v'0.2m'\s10\fRare being processed\fP
-.sp -1
-\h'4.062i'\v'2.255i'\h'-0.0m'\v'0.2m'\s10\fRthe specified events\fP
-.sp -1
-\h'4.062i'\v'2.443i'\h'-0.0m'\v'0.2m'\s10\fRare being discarded\fP
-.sp -1
-\h'4.249i'\v'1.568i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the off-key-list\fP
-.sp -1
-\h'4.187i'\v'0.318i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the on-key-list\fP
-.sp -1
-\h'0.812i'\v'0.346i'\l'0.875i'
-.sp -1
-\h'1.587i'\v'0.371i'\D'l0.100i -0.025i'
-.sp -1
-\h'1.587i'\v'0.321i'\D'l0.100i 0.025i'
-.sp -1
-\h'1.937i'\v'0.408i'\l'1.687i'
-.sp -1
-\h'3.524i'\v'0.433i'\D'l0.100i -0.025i'
-.sp -1
-\h'3.524i'\v'0.383i'\D'l0.100i 0.025i'
-.sp -1
-\h'2.037i'\v'1.258i'\D'l-0.100i 0.025i'
-.sp -1
-\h'2.037i'\v'1.308i'\D'l-0.100i -0.025i'
-.sp -1
-\h'1.937i'\v'1.283i'\l'1.687i'
-.sp -1
-\h'1.749i'\v'0.096i'\v'-.13m'\L'2.937i\(br'\v'.13m'
-.sp -1
-\h'2.037i'\v'0.508i'\D'l-0.100i 0.025i'
-.sp -1
-\h'2.037i'\v'0.558i'\D'l-0.100i -0.025i'
-.sp -1
-\h'1.937i'\v'0.533i'\l'1.687i'
-.sp -1
-\h'0.812i'\v'1.721i'\l'0.875i'
-.sp -1
-\h'1.587i'\v'1.746i'\D'l0.100i -0.025i'
-.sp -1
-\h'1.587i'\v'1.696i'\D'l0.100i 0.025i'
-.sp -1
-\h'2.099i'\v'1.758i'\D'l-0.100i 0.025i'
-.sp -1
-\h'2.099i'\v'1.808i'\D'l-0.100i -0.025i'
-.sp -1
-\h'1.999i'\v'1.783i'\l'1.688i'
-.sp -1
-\h'1.999i'\v'0.318i'\h'-0.0m'\v'0.2m'\s10\fRXIM_TRIGGER_NOTIFY\fP
-.sp -1
-\h'1.874i'\v'1.130i'\h'-0.0m'\v'0.2m'\s10\fRXIM_TRIGGER_NOTIFY_REPLY\fP
-.sp -1
-\h'1.874i'\v'0.693i'\h'-0.0m'\v'0.2m'\s10\fRXIM_EXT_SET_EVENT_MASK\fP
-.sp -1
-\v'0.255i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the on-key-list\fP
-.sp -1
-\h'2.062i'\v'0.880i'\h'-0.0m'\v'0.2m'\s10\fRfilter-event-mask is set\fP
-.sp -1
-\h'0.624i'\v'0.755i'\h'-0.0m'\v'0.2m'\s10\fRthe specified events\fP
-.sp -1
-\h'0.624i'\v'0.943i'\h'-0.0m'\v'0.2m'\s10\fRare being filtered\fP
-.sp -1
-\h'1.937i'\v'1.943i'\h'-0.0m'\v'0.2m'\s10\fRXIM_EXT_SET_EVENT_MASK\fP
-.sp -1
-\h'2.124i'\v'2.068i'\h'-0.0m'\v'0.2m'\s10\fRfilter-event-mask is set\fP
-.sp -1
-\h'0.062i'\v'1.568i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the off-key-list\fP
-.sp -1
-\h'1.062i'\h'-0.0m'\v'0.2m'\s12\fRIM library\fP
-.sp -1
-\h'0.624i'\v'2.255i'\h'-0.0m'\v'0.2m'\s10\fRthe specified events\fP
-.sp -1
-\h'0.624i'\v'2.443i'\h'-0.0m'\v'0.2m'\s10\fRare being processed\fP
-.sp -1
-.sp 1+3.033i
-.PE
-.if \n(00 .fi
-
-.\"====================================================================
-.LP
-This method does not have the problem of the time lag when going across
-the preediting on and off mode, however, the amount of the performance
-acceleration is not as good as the method described above.
-.LP
-In general, the FrontEnd method requires some synchronization to some
-of the X protocols, such as the ChangeWindowAttribute protocol for the
-event mask change or the GrabKey protocol, since it relies on the X's
-principal event dispatching mechanism. Any X protocol bindings do not
-consider the synchronization might cause some mis-synchronization
-between the IM clients and the IM Server.
-.LP
-.bp
-.IP \fB(2)
-Transport Layer\fP
-.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
-The interface layer and the transport layer make various communication
-channels usable such as X Protocol, TCP/IP, DECnet or STREAM.
-The following is a sample implementation for the transporter using
-the X connection.
-Refer to "xtrans" for the transporter using Socket Transport.
-.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
-.B
-Connection
-.LP
-.RS
-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 D-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
-.bp
-.ce
-Table D-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 D-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 D-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
-.RE
-.LP
-.sp
-.LP
-.B
-read/write
-.LP
-.RS
-The data is transferred via either ClientMessage or Window Property in
-the X Window System.
-.LP
-.B
-Format for the data from the Client to the IM Server
-.LP
-.RS
-.B
-ClientMessage
-.LP
-If data is sent via ClientMessage event, the format is as follows:
-.LP
-.ce
-Table D-4; The ClientMessage event's format (first or middle)
-.TS
-tab(;);
-l s | l
-l l | l.
-_
-.sp 6p
-.B
-Structure Member;Contents
-.sp 6p
-_
-.sp 6p
-.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 D-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
-.RS
-.B
-Property
-.LP
-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
-.bp
-.ce
-Table D-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 D-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
-.B
-Format for the data from the IM Server to the Client
-.LP
-.RS
-.B
-ClientMessage
-.LP
-The format of the ClientMessage is as follows:
-.LP
-.ce
-Table D-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
-.bp
-.ce
-Table D-9; The ClientMessage event's format (only or last)
-.TS
-tab(;);
-l s | l
-l l | l.
-_
-.sp 6p
-.B
-Structure Member;Contents
-.sp 6p
-_
-.sp 6p
-.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.
-.LP
-.B
-Property
-.LP
-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 D-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
-.bp
-.ce
-Table D-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
-.RE
-.LP
-.B
-Closing Connection
-.RS
-.LP
-If the client disconnect with the IM Server, shutdown function should
-free the communication window properties and etc..
-.RE
-.LP
-.bp
-.EH ''''
-.OH ''''
-.EF ''''
-.OF ''''
-.TC
-