1  DEC 入力サーバ・ライブラリ

このドキュメントでは,Compaq のプラットホーム上で,X11R6 XIM ライブラリを使用してクライアントと通信するための X11R6 入力サーバを作成する際に必要な情報を記述します。

Tru64 UNIX オペレーティング・システムでは,通信メカニズムに関する詳しい知識がなくても入力サーバを作成できるようなアプリケーション・プログラミング・インタフェース (API) を提供しています。

1.1 用語

名前 説明
IMS (Input Method Server) 入力サーバ。XIM ライブラリからの入力キー・イベントおよびプロトコルを受信および処理し,前編集と文字列の確定を行うプロセスです。
IMSSL (Input Method Server Service Layer) IMS の開発に必要なすべての API が含まれている層です。
DECXim プロトコル DEC の入力メソッド・プロトコルです。
IMS プログラマ IMS の開発者です。
DIMs ウィジェット (Digital Input Method Server widget) クライアントが XCreateIC() を実行するときに作成されるウィジェットです。DIMs ウィジェットは,クライアントの XIC オブジェクトを処理する基本単位です。
DIM クラス DIMs ウィジェットの特性と動作を決定するオブジェクトです。IMS プログラマはこの DIMs クラスにリソースを設定します。

1.2 背景

日本語,中国語,韓国語といったアジア言語環境では文字入力メソッドが複雑なため,文字入力メソッド部分は通常,アプリケーションから独立したサーバ・プロセスとして構成されます。ウィンドウ環境においては,入力サーバ (IMS) がその役割を受け持ちます。

Tru64 UNIX では入力サーバとクライアント間の通信は R6 XIM プロトコルで行われます。クライアント側では X ライブラリ (Xlib),X ツールキット・ライブラリ (Xt) および Motif ライブラリ (Xm) を使用することによって R6 XIM プロトコルを扱うことができます。しかし入力サーバ側にはそのような上位レベルのプログラミング・インタフェースは提供されていませんでした。

1.3 アーキテクチャ

1.3.1 IMSSL の構造

クライアントが XOpenIM() を呼び出すと,IM ライブラリと IMSSL との間の接続が行われます。IMSSL は接続を行い,IM ライブラリ・コンテキストを作成し,クライアントに対する XIMID を生成します。クライアントは,XCreateIC() を使用して各入力テキスト・フィールドに対応する入力コンテキスト (IC) を作成します。

クライアントが複数の入力フィールドを持っている場合,IMSSL は個々の入力フィールドを管理するためにフィールドと同数の IC を作成し,有効な XICID を生成します。さらに,個々の IC に対応する DIMs ウィジェットが作成されます。この DIMs ウィジェットは,IMS プログラマによってコールバック・ルーチンなどのリソースで設定される DIMs クラスの動作を継承します。このように,IMSSL の IM および IC のコンテキストが IMS プログラマに対して透過的になっています。このため,IMS プログラマはそれぞれの DIMs ウィジェットを扱い,IMS のスタートアップ時に DIMs クラスのリソースを設定するだけでよいのです。

図 1-1 に,IMSSLの構造と各構成要素の関係を示します。

図 1-1 IMSSL の構造

1.3.2 イベント処理モデル

イベント処理モデルには,FrontEnd メソッドおよび BackEnd メソッドの 2 種類があります。

FrontEnd メソッドでは,クライアント・ウィンドウの入力イベントは,X サーバによって IMS ライブラリと XIM ライブラリの両方に直接渡されます。FrontEnd メソッドは,対話式の前編集において優れた性能を提供します。ただし FrontEnd モデルでは,IMS が処理するキー・イベントとクライアントが処理する他のイベントとの間で,同期化の問題が発生します。このため,FrontEnd メソッドではキー・イベントの損失または重複が発生することがあります。

BackEnd メソッドでは,クライアント・ウィンドウの入力イベントは,XIM ライブラリに渡したあと IMS に渡されます。各イベントは渡された順でシリアルに処理されるため,XIM ライブラリと IMS ライブラリとの間で同期化の問題は発生しません。BackEnd メソッドを使用すると,IM ライブラリは,すべての KeyPress と KeyRelease,およびイベント・フロー制御で必要とするその他のイベントを IMS に転送し,IMS と同期をとります。

R6 XIM および R5 DECXim プロトコルは,BackEnd モデルのみをサポートしています。

1.3.3 イベント・フロー制御

R6 XIM および R5 DECXim プロトコルは,XIM ライブラリと IMS 間の通信のために静的イベント・フローおよび動的イベント・フローの 2 種類のイベント・フロー・モデルをサポートしています。

静的イベント・フローでは,入力キー・イベントがクライアントから IMS に常に送信されます。

動的イベント・フローでは,処理が必要なキー・イベントだけがクライアントから IMS に送信されます。たとえば,ASCII 文字と漢字を組み合わせて入力する場合,ASCII 文字は IMS で処理する必要はないのでキー・イベントを IMS に送信する必要はありませんが,漢字を形成するために必要なキー・イベントは IMS に送信しなければなりません。

動的イベント・フロー・モデルをサポートするには,IMS プログラマはトリガ・オン・キー・リストをクライアントに送信する必要があります (詳細は,第1.4.8項を参照)。クライアントは,トリガ・オン・キー・リストに含まれるキーを受信して初めて,キー・イベントを IMS に送信します。IMS プログラマがトリガ・オフ・キー・リストを提供している場合,トリガ・オフ・キー・リストに含まれるキーを受信すると,クライアントは IMS へのイベントの送信を停止します。IMS がトリガ・オフ・キー・リストを提供していない場合,IMS はトリガ・オフ・キーをチェックするために API を呼び出し,イベント・フローを停止します。詳細は,第1.5節の DIMsSetEventsForward の項を参照してください。

1.3.4 サーバの命名規約

IMS は,クライアントからの接続のために 1 つまたは複数のアトムを登録します。クライアントは,ロケール情報と環境変数 XMODIFIERS から特定の IMS と接続しようとします。たとえば,XMODIFIERS が @im=wnn でロケールが ja_JP.SJIS の場合,クライアントは _XIM_ja_JP.SJIS@wnn というアトムを検索します。このアトムが検出できない場合,クライアントは _XIM_ja_JP@wnn というアトムを探します。このアトムも検出できない場合は,接続が失敗したとみなされます。XMODIFIERS 環境変数が設定されていない場合,クライアントは _XIM_ja_JP.SJIS@DEC および _XIM_ja_JP@DEC を検索します。これらは DEC が提供する IMS のサーバ名です。サーバ名の設定方法についての詳細は,第1.4.2項を参照してください。

1.3.5 IMSSL の機能

Tru64 UNIX の IMSSL は,IMS の開発者に以下のような機能を提供します。

1.4 DIMs クラスのリソース

各 DIMs ウィジェットは,ウィジェット自身の動作を決定する一連のデータを持っています。これを DIMs クラスと呼びます。この節では,DIMs クラスの各リソースの意味とその使用方法を説明します。

次の表に,プログラマがデータを指定するために使用する DIMs クラスのリソースを示します。各リソースは,DIMsSetTriggerKeys() を使用して設定および変更を行う DIMsNtriggerKeys を除いて,DIMsClassCtxCreate() 使用時にのみ設定できます。DIMsClassCtxCreate() および DIMsSetTriggerKeys() については,第1.5節を参照してください。

次の表の備考の欄は,DIMs クラスの作成時にリソースの設定が必須 (M) であるか,あるいは任意 (O) であるかを示しています。

名前 省略時の値 タイプ 備考
DIMsNlocale NULL DIMsLocaleInfo M
DIMsNserverName NULL DIMsStringList M
DIMsNversion 動的 DIMsVersion O
DIMsNextIMAttr NULL DIMsExtAttr O
DIMsNextICAttr NULL DIMsExtAttr O
DIMsNsupportStyles NULL DIMsSupportStyles M
DIMsNsupportEncodings Compound Text DIMssStringList O
DIMsNtriggerKeys NULL DIMsTriggerKeys O
DIMsNgetExtIMValuesCb NULL XPointer O
DIMsNcreateICCb NULL XPointer O
DIMsNdestroyICCb NULL XPointer O
DIMsNsetExtICValuesCb NULL XPointer O
DIMsNgetExtICValuesCb NULL XPointer O
DIMsNsetICFocusCb NULL XPointer O
DIMsNunsetICFocusCb NULL XPointer O
DIMsNresetICCb NULL XPointer O
DIMsNprocessEventCb NULL XPointer M
DIMsNsetAreaCb NULL XPointer O
DIMsNsetAreaNeededCb NULL XPointer O
DIMsNsetSpotLocationCb NULL XPointer O
DIMsNsetColormapCb NULL XPointer O
DIMsNsetStdColormapCb NULL XPointer O
DIMsNsetForegroundCb NULL XPointer O
DIMsNsetBackgroundCb NULL XPointer O
DIMsNsetBgPixmapCb NULL XPointer O
DIMsNsetFontSetCb NULL XPointer O
DIMsNsetLineSpaceCb NULL XPointer O
DIMsNsetCursorCb NULL XPointer O
DIMsNgetFilterEventsCb 動的 XPointer O
DIMsNgetAreaCb NULL XPointer O
DIMsNgetAreaNeededCb NULL XPointer O
DIMsNgetSpotLocationCb NULL XPointer O
DIMsNgetColormapCb NULL XPointer O
DIMsNgetStdColormapCb NULL XPointer O
DIMsNgetForegroundCb NULL XPointer O
DIMsNgetBackgroundCb NULL XPointer O
DIMsNgetBgPixmapCb NULL XPointer O
DIMsNgetFontSetCb NULL XPointer O
DIMsNgetLineSpaceCb NULL XPointer O
DIMsNgetCursorCb NULL XPointer O
DIMsNclientdata NULL XPointer O

以下の項で,これらのリソースについて説明します。

1.4.1 DIMsNlocale

DIMs ウィジェットがサポートするロケールを指定します。このリソースの値は DIMsLocaleInfo 型で,次の構造体へのポインタです。

           typedef struct_DIMsLocaleInfo {
                   char    *language;
                   short   num_support_codesets;
                   char    **support_codesets;
           }  DIMsLocaleInfoRec, *DIMsLocaleInfo;

language フィールドには言語とテリトリを指定します。指定する値は,たとえば ja_JP のように,XNLS に準拠しているものでなければなりません。DIMs ウィジェットが複数のコードセットをサポートしている場合は,ヌル終了文字列の配列として support_codesetsフ ィールドを指定してください。たとえば日本語 DIMs ウィジェットの場合,support_codesets には eucJP,SJIS を指定することができます。DIMs ウィジェットがすべてのコード・セットをサポートする場合は,num_support_encodings に 0 を,support_codesets に NULL を指定してください。クライアントが IMS に接続された後,クライアントのロケールは DIMsLocale(w) を使用して得ることができます。DIMsLocale についての詳細は,第1.5節を参照してください。

このリソースは DIMs クラスの作成に必須です。

1.4.2 DIMsNserverName

接続に使用される一連のアトム名を指定します。このリソースの値は,DIMsStringList 型で,次の構造体へのポインタです。

           typedef struct_DIMsStringList {
                   short   num_of_strings;
                   char    **string_names;
           } DIMsStringListRec, *DIMsStringList;

num_of_strings フィールドには,接続に使用される別名の数を指定します。string_names フィールドには,接続に使用されるアトムの名前を指定するヌル終了文字列の配列を指定します。たとえば Tru64 UNIX では,日本語IMSの省略時の名前は DEC であり,次のようなアトムが作成されます。

_XIM_ja_JP@DEC

@DEC で終わるアトムは DEC 専用ですので,同じ名前でアトムを作成しないでください。Tru64 UNIX XIM と IMS との接続方法については,第1.3.2項および第1.3.3項を参照してください。

このリソースは DIMs クラスの作成に必須です。

1.4.3 DIMsNversion

DIMs ウィジェットがサポートする IM プロトコルのバージョンを範囲で指定します。このリソースの値は DIMsVersion 型で,次の構造体へのポインタです。

          typedef struct_DIMsVersion {
                  short   highest_major_version;
                  short   highest_minor_version;
                  short   lowest_major_version;
                  short   lowest_minor_version;
          } DIMsVersionRec, *DIMsVersion;

highest_major_versionフィールドには,DIMs クラスがサポートする IM プロトコルの最高メジャー・バージョンを指定します。

highest_minor_version フィールドには,DIMs クラスがサポートする IM プロトコルの最高マイナー・バージョンを指定します。

lowest_major_version フィールドには,DIMs クラスがサポートする IM プロトコルの最低メジャー・バージョンを指定します。

lowest_major_version フィールドには,DIMs クラスがサポートする IM プロトコルの最低マイナー・バージョンを指定します。

本バージョンでは通常次のように設定します。


highest_major_version = 3
highest_minor_version = 0
lowest_major_version = 3
lowest_minor_version = 0

このリソースは任意です。

1.4.4 DIMsNextIMAttr

DIMs ウィジェットがサポートする拡張 XIM 属性 (XIM 値) を指定します。このリソースが指定されると,クライアントは,これらの拡張 XIM 値に対して XGetIMValues() を使用することができます。このリソースの値は DIMsExtAttr 型で,次の構造体へのポインタです。

           typedef struct_DIMsExtAttr {
                   short   num_of_ext_attr;
                   Attr    ext_attr;
           } DIMsExtAttrRec, *DIMsExtAttr;

num_of_ext_attr フィールドには,拡張 XIM 属性の数を指定します。ext_attr フィールドには,拡張 XIM の属性の配列を指定します。このフィールドの値は Attr 型で,次の構造体へのポインタです。

          typedef struct_Attr {
                  unsigned short   type;
                  char             *attributes;
          } AttrRec, *Attr;

type フィールドには,属性の型を定義する次のいずれかの値を指定します。

     #define byte_t           1        /* 8 ビット符号なし整数*/
     #define word_t           2        /* 16 ビット符号なし整数 */
     #define long_t           3        /* 32 ビット符号なし整数 */
     #define string_t         4        /* char の配列 */
     #define window_t         5        /* Window フォーマット */
     #define ximstyles_t      10       /* XIMStyles フォーマット */
     #define xrectangle_t     11       /* XRectangle フォーマット */
     #define xpoint_t         12       /* XPoint フォーマット */
     #define xfontset_t       13       /* XFontSet フォーマット */

attributes フィールドには,拡張 XIM 値の名前を定義します。この値はヌル終了文字列でなければなりません。

このリソースは任意です。

1.4.5 DIMsNextICAttr

DIMs ウィジェットがサポートする拡張 XIC 属性 (XIC 値) を指定します。このリソースが指定されると,クライアントはこれらの拡張 XIC 値に対して XGetICValues() および XSetICValues() を使用することができます。このリソースの値は DIMsExtAttr 型で,次の構造体へのポインタです。

           typedef struct_DIMsExtAttr {
                   short   num_of_ext_attr;
                   Attr    ext_attr;
           } DIMsExtAttrRec, *DIMsExtAttr;

num_of_ext_attr フィールドには,拡張 XIC 属性の数を指定します。ext_attr フィールドには,拡張 XIC の配列を指定します。このフィールドの値は Attr 型で,次の構造体へのポインタです。

           typedef struct_Attr {
                   unsigned short   type;
                   char             *attributes;
           } AttrRec, *Attr;

type フィールドには,属性のタイプを定義する次のいずれかの値を指定します。

#define byte_t           1               /* 8 ビット符号なし整数*/
#define word_t           2               /* 16 ビット符号なし整数*/
#define long_t           3               /* 32 ビット符号なし整数*/
#define string_t         4               /* char の配列*/
#define window_t         5               /* Window フォーマット*/
#define ximstyles_t      10              /* XIMStyles フォーマット*/
#define xrectangle_t     11              /* XRectangle フォーマット*/
#define xpoint_t         12              /* XPoint フォーマット*/
#define xfontset_t       13              /* XFontSet フォーマット*/

attributes フィールドには,拡張 XIC 値の名前を定義します。この値はヌル終了文字列でなければなりません。

このリソースは任意です。

1.4.6 DIMsNsupportStyles

DIMs ウィジェットがサポートする入力スタイルを指定します。このリソースの値は DIMsSupportStyles 型で,次の構造体へのポインタです。

           typedef struct_DIMsSupportStyles {
                   short   num_support_styles;
                   XIMStyle        *support_styles;
           } DIMsSupportStylesRec, *DIMsSupportStyles;

num_support_styles フィールドには,サポートする入力スタイルの数を指定します。support_styles フィールドには,XIMStyle の配列を指定します。

クライアントが IMS と接続したら,クライアントが選択した入力スタイルを DIMsInputStyle(w) を使用して得ることができます。DIMsInputStyle についての詳細は第1.5節を参照してください。

このリソースは必須です。

1.4.7 DIMsNsupportEncodings

DIMs ウィジェットがサポートするエンコーディングを指定します。XIM ライブラリは IMS に対して,確定した文字列または前編集の文字列に使用するエンコーディングを決定するよう要求します。IMS は省略時のエンコーディングとして少なくとも COMPOUND_TEXT をサポートする必要があります。このリソースの値は DIMsStringList 型で,次の構造体へのポインタです。

           typedef struct_DIMsStringList {
                   short   num_of_strings;
                   char    **string_names;
           } DIMsStringListRec, *DIMsStringList;

num_of_strings フィールドには,サポートするエンコーディングの数を指定します。

string_names フィールドには,DIMs ウィジェットのエンコーディングを優先順位の高い順に定義するヌル終了文字列の配列を指定します。たとえば,通信のためのエンコーディングとして STRING を使用したい場合,string_names フィールドに STRING,COMPOUND_TEXT の順でエンコーディングを指定します。XIM ライブラリが STRING エンコーディングをサポートする場合は STRING が通信に使用され,STRING エンコーディングをサポートしない場合は COMPOUND_TEXT が使用されます。

これらの 2 つのフィールドが指定さていない場合,XIM ライブラリはエンコーディングとして COMPOUND_TEXT を使用します。クライアントが IMS と接続したら,サポートされているエンコーディングは DIMsEncoding(w) を使用して得ることができます。DIMsEncoding についての詳細は,第1.5節を参照してください。

1.4.8 DIMsNtriggerKeys

IMS のトリガ・キーのオン/オフを指定します。このリソースの値は DIMsTriggerKeys 型で,次の構造体へのポインタです。

           typedef struct_DIMsTriggerKeys {
                   short           num_of_on_keys;
                   XIMTriggerkey   on_keys;
                   short           num_of_off_keys;
                   XIMTriggerkey   off_keys;
           } DIMsTriggerKeysRec, *DIMsTriggerKeys;

on_keys には,入力メソッドをトリガ・オンできるキーのリストを指定します。num_of_on_keys には,リストに含まれるキーの数を指定します。

off_keys には,入力メソッドをトリガ・オフさせるキーのリストを指定します。num_of_off_keys には,リストに含まれるキーの数を指定します。

XIMTriggerkey は次の構造体へのポインタです。

           typedef struct_XIMTriggerkey
           {
               KeySym keysym;
               unsigned long modifier;
               unsigned long modifier_mask;
           } XIMTriggerkeyRec, *XIMTriggerkey;

keysym フィールドには,たとえば XK_SPACE のような,入力メソッドをトリガ・オン/オフさせるためのキーシンボルを指定します。

modifier フィールドには,トリガ・キー・シーケンスのキー・マスクを指定します。ShiftMask,ControlMask,Mod1Mask (コンポーズ・マスク),あるいはこれらの組み合わせのいずれかです。

modifier_mask は,KeyPress イベントがトリガ・キーであるかどうかの評価に使用されるマスクです。たとえば,トリガー・オン (開始変換) キーが Ctrl 〜 Shift<key> スペースである場合,有効なトリガ・オン・キーの修飾子の状態は,ControlMask に対しては on,ShiftMask に対しては off です。したがって,modifier_mask フィールドを ControlMask | ShiftMask と設定するのに対して,modifier フィールドは ControlMask と設定します。

入力メソッドのトリガ・オン/オフのテストのため,受け入れるどのキー・イベントの修飾子も,最初に modifier_mask によってマスキングされます。この処理の結果は,修飾子の値と等しくなければなりません。

このリソースは,DIMsSetTriggerKeys() を呼び出すことによりいつでも変更することができます。DIMsSetTriggerKeys についての詳細は,第1.5節を参照してください。

このリソースは任意です。このリソースを指定しない場合は静的イベント・フローが使用されるため,すべてのイベントがクライアントから IMS に転送されます。イベント・フロー・モデルについての詳細は,第1.3.3項を参照してください。

1.4.9 DIMsNgetExtIMValuesCb

拡張 XIM 属性の値を得るために,クライアントが XGetIMValues を呼び出すときに呼び出されるコールバックを指定します。詳細については,第1.5節を参照してください。

このリソースは任意です。

1.4.10 DIMsNcreateICCb

クライアントが XCreateIC を呼び出すときに呼び出されるコールバックを指定します。このコールバックを呼び出す前に DIMs ウィジェットが作成されます。IMS プログラマは,すべての初期化作業を行い,通常は DIMs ウィジェットに対応する入力メソッド特定データを作成する必要があります。詳細については,第1.5節を参照してください。

このリソースは任意です。

1.4.11 DIMsNdestroyICCb

クライアントが XDestroyIC を呼び出すときに呼び出されるコールバックを指定します。IMS プログラマは,DIMs ウィジェット作成時に作成したすべてのデータを解放しなければなりません。詳細については,第1.5節を参照してください。

このリソースは任意です。

1.4.12 DIMsNsetExtICValuesCb

拡張 XIC 属性の値を設定するために,クライアントが XSetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。

1.4.13 DIMsNgetExtICValuesCb

拡張 XIC 属性の値を取得するために,クライアントが XGetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。

1.4.14 DIMsNsetICFocusCb

クライアントが XSetICFocus を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。

1.4.15 DIMsNunsetICFocusCb

クライアントが XUnsetICFocus を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。

1.4.16 DIMsNresetICCb

クライアントが XmbResetIC または XwcResetIC を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。

1.4.17 DIMsNprocessEventCb

クライアントが IMS に要求されたイベントを転送するときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは必須です。

1.4.18 DIMsNsetAreaCb

XIC 属性の 1 つとして XNArea を設定するために,クライアントが XSetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。

1.4.19 DIMsNsetAreaNeededCb

XIC 属性の 1 つとして XNAreaNeeded を設定するために,クライアントが XSetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。

1.4.20 DIMsNsetSpotLocationCb

XIC 属性の 1 つとして XNSpotLocation を設定するために,クライアントが XSetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。

1.4.21 DIMsNsetColormapCb

XIC 属性の 1 つとして XNColormap を設定するために,クライアントが XSetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。

1.4.22 DIMsNsetStdColormapCb

XIC 属性の 1 つとして XNStdColormap を設定するために,クライアントが XSetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。

1.4.23 DIMsNsetForegroundCb

XIC 属性の 1 つとして XNForeground を設定するために,クライアントが XSetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。

1.4.24 DIMsNsetBackgroundCb

XIC 属性の 1 つとして XNBackground を設定するために,クライアントが XSetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。

1.4.25 DIMsNsetBgPixmapCb

XIC 属性の 1 つとして XNBackgroundPixmap を設定するために,クライアントが XSetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。

1.4.26 DIMsNsetFontSetCb

XIC 属性の 1 つとして XNFontSet を設定するために,クライアントが XSetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。

1.4.27 DIMsNsetLineSpaceCb

XIC 属性の 1 つとして XNLineSpace を設定するために,クライアントが XSetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。

1.4.28 DIMsNsetCursorCb

XIC 属性の 1 つとして XNCursor を設定するために,クライアントが XSetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。

1.4.29 DIMsNgetFilterEventsCb

XIC 属性の 1 つとして XNFilterEvents を取得するために,クライアントが XGetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。このリソースが指定されない場合,IMSSL は KeyPressMask | KeyReleaseMask をクライアントに返します。

1.4.30 DIMsNgetAreaCb

XIC 属性の 1 つとして XNArea を取得するために,クライアントが XGetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。

1.4.31 DIMsNgetAreaNeededCb

XIC 属性の 1 つとして XNAreaNeeded を取得するために,クライアントが XGetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。

1.4.32 DIMsNgetSpotLocationCb

XIC 属性の 1 つとして XNSpotLocation を取得するために,クライアントが XGetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。

1.4.33 DIMsNgetColormapCb

XIC 属性の 1 つとして XNColormap を取得するために,クライアントが XGetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。

1.4.34 DIMsNgetStdColormapCb

XIC 属性の 1 つとして XNStdColormap を取得するために,クライアントが XGetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。

1.4.35 DIMsNgetForegroundCb

XIC 属性の 1 つとして XNForeground を取得するために,クライアントが XGetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。

1.4.36 DIMsNgetBackgroundCb

XIC 属性の 1 つとして XNBackground を設定するために,クライアントが XGetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。

1.4.37 DIMsNgetBgPixmapCb

XIC 属性の 1 つとして XNBackgroundPixmap を設定するために,クライアントが XGetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。

1.4.38 DIMsNgetFontSetCb

XIC 属性の 1 つとして XNFontSet を取得するために,クライアントが XGetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。

1.4.39 DIMsNgetLineSpaceCb

XIC 属性の 1 つとして XNLineSpace を設定するために,クライアントが XGetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。

1.4.40 DIMsNgetCursorCb

XIC 属性の 1 つとして XNCursor を設定するために,クライアントが XGetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。

このリソースは任意です。

1.4.41 DIMsNclientdata

上記のコールバック・ルーチンへの引数の 1 つとして渡されるクライアント・データを指定します。

このリソースは任意です。

1.5 パブリック・ルーチン

この節では,コールバック・ルーチンを含む IMSSL のすべてのパブリック・ルーチンの使用方法を記述します。

DIMsClassCtxCreate

DIMs ウィジェットで使用するクラス・コンテキストを作成する関数です。

フォーマット


    DIMsClassCtx DIMsClassCtxCreate  (head, name, arglist, 
                                              argcount)

引数

DIMsClassCtx head;
char *name;
ArgList arglist;
Cardinal argcount;

戻り値

DIMs クラス・コンテキスト ID が返されます。

説明

DIMsClassCtxCreate は,DIMs ウィジェットのクラス・コンテキストのインスタンスを作成し,対応するクラス・コンテキスト ID を返します。この関数を呼び出すことによって,このクラス・コンテキストのリストを作成することができます。

head DIMs クラス・コンテキスト・リストのヘッドを指定します。この関数をはじめて呼び出す場合は,NULL 値を渡すことができます。別のクラス・コンテキストを作成する場合には,最初の呼び出しに対する戻り値をこの関数に渡す必要があります。
name DIMs クラス名を指定します。DIMs クラス名は呼び出し後に解放されるヌル終了文字列でなければなりません。
arglist DIMs クラスのリソースの名称と値を含む引数リストを指定します。リソースに割り当てられたメモリは,呼び出した後に解放することができます。
argcount 引数リスト内の引数の数を指定します。

このルーチンは,DIMsClassInitialize() が呼び出される前に,最低 1 回呼び出す必要があります。

DIMs クラスのリソースの完全な定義については,第1.4節を参照してください。

DIMsSLInitialize

DEC 入力サーバ・サービス層を初期化する関数です。

フォーマット


    void DIMsSLInitialize (toplevel, ctx)

引数

Widget toplevel;
DIMsClassCtx ctx;

戻り値

戻り値はありません。

説明

DIMsSLInitialize は,DIMs クラス・コンテキストを作成した後に 1 回だけ呼び出します。このルーチンは IMSSL を初期化します。

toplevel (XtAppInitialize() などによって返される) アプリケーション・シェル・ウィジェットのウィジェット ID を指定します。
ctx DIMs ウィジェット・クラス・リストのヘッドを指定します。

DIMsProtoInit

プロトコル層を初期化する関数です。

フォーマット


    void DIMsProtoInit (toplevel, app_context)

引数

Widget toplevel;
XtAppContext app_context;

戻り値

戻り値はありません。

説明

DIMsProtoInit はプロトコル層を初期化します。このルーチンは,アプリケーション・シェル・ウィジェットが実現された後に 1 回だけ呼び出されなければなりません。

toplevel (XtAppInitialize() などによって返される) アプリケーション・シェル・ウィジェットのウィジェット ID を指定します。toplevel は,この関数が呼び出される前に実現されていなければなりません。
app_context IMS のアプリケーション・コンテキストを指定します。IMS プログラマは,XtAppInitialize() または Intrinsics アプリケーション・コンテキスト初期化ルーチンを使用することによって,IMS アプリケーション・コンテキストを得ることができます。

DIMsPreEditStart

DIMs ウィジェットに対応する入力コンテキストの前編集セッションを開始する関数です。

フォーマット


    int DIMsPreEditStart (w)

引数

Widget w;

戻り値

正の戻り値は,クライアントが前編集文字列に使用できる最大バイト数です。

戻り値-1 は,前編集文字列のサイズが無制限であることを示します。

説明

DIMsPreEditStart は前編集セッションを開始します。クライアント側では,PreeditStart コールバックが発行されると前編集バッファで使用できる最大値が返されます。この呼び出しは入力スタイルが on-the-spot の場合に使用され,KeyRelease イベントによってトリガされます。詳細については,processEventCb の項を参照してください。

この呼び出しは,createICCb(),または reason 引数として DimCR_CreateIC を設定するようなコールバックでは,クライアントと IMS の接続がまだ確立されていないため使用できないことに注意してください。このようなコールバックの詳細については,setAreaCb の項およびそれ以降のいくつかの項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。

DIMsPreEditDone

DIMs ウィジェットに対応する入力コンテキストの前編集セッションを終了させる関数です。

フォーマット


    void DIMsPreEditDone (w)

引数

Widget w;

戻り値

戻り値はありません。

説明

DIMsPreEditDone は前編集セッションを終了させます。クライアント側では,PreeditDone コールバックが発行されると前編集バッファが解放されます。この呼び出しはスタイルが on-the-spot の場合のみ使用できます。

この呼び出しは,createICCb(),または reason 引数として DimCR_CreateIC を設定するようなコールバックでは,クライアントと IMS の接続がまだ確立されていないため使用できないことに注意してください。このようなコールバックの詳細については,setAreaCb の項およびそれ以降のいくつかの項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。

DIMsIsIState

DIMs ウィジェットに対応する入力コンテキストの前編集セッションが開始されているかどうかをチェックする関数です。

フォーマット


    Boolean DIMsIsIState (w)

引数

Widget w;

戻り値

DIMs ウィジェットの前編集セッションが開始されている場合は,Ture が返されます。DIMs ウィジェットの前編集セッションが開始されていない場合は,False が返されます。

説明

DIMsIsIState は,DIMs ウィジェットの前編集セッションが開始されているかどうかを示すブール値を返します。この呼び出しは入力スタイルが on-the spot の場合のみ使用できます。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。

DIMsPreEditDraw

前編集セッションを開始した入力コンテキストで,文字列を挿入/削除/置換する関数です。

フォーマット


    void DIMsPreEditDraw  (w, caret, chg_first, chg_length,
                                string, string_length, 
                                reditions, redition_length)

引数

Widget w;
int caret;
int chg_first;
int chg_length;
void *string;
int string_length;
XIMFeedback *renditions;
int rendition_length;

戻り値

戻り値はありません。

説明

DIMsPreEditDraw は,入力コンテキストの前編集文字列を挿入/削除/置換するために使用されます。クライアント側では,PreeditDraw コールバックが発行されると,このルーチンの引数に与えられた情報に従って編集バッファが挿入/削除/置換されます。この呼び出しは入力スタイルが on-the-spot の場合のみ使用できます。

この呼び出しは,createICCb(),または reason 引数として DimCR_CreateIC を設定するようなコールバックでは,クライアントと IMS の接続がまだ確立されていないため使用できないことに注意してください。このようなコールバックの詳細については,setAreaCb の項およびそれ以降のいくつかの項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
caret 前編集文字列のカーソル・オフセット (文字単位) を指定します。
chg_first 変更部分の開始位置 (文字単位) を指定します。
chg_length 変更部分の長さ (文字単位) を指定します。
string 入力コンテキストに渡す文字列を指定します。エンコーディングは DIMsEncoding(w) の戻り値に一致しなければなりません。IMS プログラマーは,このデータにメモリを割り当てたら呼び出し後に解放する必要があります。
string_length string のバイト数を指定します。
renditions 文字ごとの表示情報を持つ XIMFeedback の配列へのポインタを指定します。
redition_length reditions のメンバ数を指定します。

DIMsPreEditCaret

前編集の際にテキスト挿入位置を移動する関数です。

フォーマット


    void DIMsPreEditCaret  (w, position, direction, style)

引数

Widget w;
int *position; (呼び出し側へ返す)
XIMCaretDirection direction;
XIMCaretStyle; style;

戻り値

戻り値はありません。

説明

DIMsPreEditCaret は,前編集の際に,テキスト挿入位置を移動させる関数です。クライアント側では,PreeditCaret コールバックが発行されると新しいカレットの位置が返されます。この関数を呼び出す場合には,position 引数にカレットの位置を指定しなければなりません。この関数は,同じ引数で前編集文字列の新しいオフセットを返します。この呼び出しは入力スタイルが on-the-spot の場合のみ使用できます。

この呼び出しは,createICCb(),または reason 引数として DimCR_CreateIC を設定するようなコールバックでは,クライアントと IMS の接続がまだ確立されていないため使用できないことに注意してください。このようなコールバックの詳細については,setAreaCb の項およびそれ以降のいくつかの項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
position 前編集文字列内のカレット・オフセットを指定します。呼び出し後には,初期位置からの新しいオフセット値が返されます。
direction カレットが移動する方向を指定します。
style カレットのフィードバックを指定します。

DIMsStatusStart

DIMs ウィジェットに対応する入力コンテキストの状態更新セッションを開始する関数です。

フォーマット


    void DIMsStatusStart (w)

引数

Widget w;

戻り値

戻り値はありません。

説明

DIMsStatusStart は,状態領域を更新する前に呼び出される必要があります。クライアント側では StatusStart が発行されます。この呼び出しは XIMStatusCallback にのみ使用できます。

この呼び出しは,createICCb(),または reason 引数として DimCR_CreateIC を設定するようなコールバックでは,クライアントと IMS の接続がまだ確立されていないため使用できないことに注意してください。このようなコールバックの詳細については,setAreaCb の項およびそれ以降のいくつかの項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。

DIMsStatusDone

DIMs ウィジェットに対応する入力コンテキストの状態更新セッションを終了させます。

フォーマット


    void DIMsStatusDone (w)

引数

Widget w;

戻り値

戻り値はありません。

説明

DIMsStatusDone は,状態領域を更新した後に呼び出す必要があります。クライアント側では,StatusDone コールバックが発行されます。この呼び出しは,XIMStatusCallback にのみ使用できます。

この呼び出しは,createICCb(),または reason 引数として DimCR_CreateIC を設定するようなコールバックでは,クライアントと IMS の接続がまだ確立されていないため使用できないことに注意してください。このようなコールバックの詳細については,setAreaCb の項およびそれ以降のいくつかの項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。

DIMsStatusDraw

DIMs ウィジェットに対応する入力コンテキストの状態領域を更新する関数です。

フォーマット


    void DIMsStatusDraw  (w, type, string, string_length,
                                 reditions, renditions_length,
                                 bitmap)

引数

Widget w;
XIMStatusDataType type;
void *string;
int string_length;
XIMFeedback *renditions;
int rendition_length;
Pixmap bitmap;

戻り値

戻り値はありません。

説明

DIMsStatusDraw は,入力コンテキストの状態領域を更新します。クライアント側では,StatusDraw コールバックが発行されます。この呼び出しは,XIMStatusCallback にのみ使用できます。

この呼び出しは,createICCb(),または reason 引数として DimCR_CreateIC を設定するようなコールバックでは,クライアントと IMS の接続がまだ確立されていないため使用できないことに注意してください。このようなコールバックの詳細については,setAreaCb の項およびそれ以降のいくつかの項を参照してください。

w 入力コンテキストに対応する DIMs を指定します。
type テキストまたはビットマップのいずれを使用するかを指定します。
string 状態領域を更新するためのテキストを指定する。エンコーディングは DIMsEncoding(w) の戻り値と一致しなければなりません。このデータにメモリを割り当てたら呼び出し後に解放する必要があります。
string_length string のバイト数を指定します。
renditions 文字ごとの表示情報を持つ XIMFeedback の配列へのポインタを指定します。
rendition_length renditions のメンバ数を指定します。
bitmap type が XIMBitmapType の場合にビットマップを指定します。

DIMsGeometryNegotiation

クライアントと,ジオメトリについての折衝を開始する関数です。

フォーマット


    Boolean DIMsGeometryNegotiation (w)

引数

Widget w;

戻り値

クライアントが GeometryNegotiation コールバックをサポートする場合は,True が返されます。クライアントが GeometryNegotiation コールバックをサポートしない場合は,False が返されます。

説明

DIMsGeometryNegotiation は,ジオメトリについてのクライアントとの折衝を開始します。クライアント側では,GeometryNegotiation コールバックが発行されます。この呼び出しは入力スタイルが off-the-spot の場合のみ使用できます。

この呼び出しは,createICCb(),または reason 引数として DimCR_CreateIC を設定するようなコールバックでは,クライアントと IMS の接続がまだ確立されていないため使用できないことに注意してください。このようなコールバックの詳細については,setAreaCb の項およびそれ以降のいくつかの項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。

DIMsSetEventsForward

DIMs ウィジェットに対応する入力コンテキストへの,クライアントからのイベント転送を有効または無効にします。

フォーマット


    void DIMsSetEventsForward (w, state)

引数

Widget w;
Boolean state;

戻り値

戻り値はありません。

説明

DIMsSetEventsForward は,XFilterEvents() による,クライアントから入力コンテキストへのイベント転送を有効,または無効にします。この関数は,IMS が動的イベント・フロー・モデルをサポートする場合にのみ有用です。イベント・フロー・モデルについての詳細は,第1.3.3項を参照してください。

この呼び出しは,createICCb(),または reason 引数として DimCR_CreateIC を設定するようなコールバックでは,クライアントと IMS の接続がまだ確立されていないため使用できないことに注意してください。このようなコールバックの詳細については,setAreaCb の項およびそれ以降のいくつかの項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
state イベント・フロー状態を指定します。クライアントによる入力コンテキストへのイベント転送を有効にする場合は Ture を指定し,クライアントがトリガオン・キーを受信するまで入力コンテキストへのイベント転送を無効にするには False を指定します。

DIMsIsEventsForwarded

クライアントから DIMs ウィジェットに対応する入力コンテキストにイベントが転送されているかどうかを問い合わせる関数です。

フォーマット


    Boolean DIMsIsEventsForwarded (w)

引数

Widget w;

戻り値

クライアントからのイベント転送が有効になっている場合には,Ture が返されます。クライアントからのイベントの転送が無効になっている場合には,False が返されます。

説明

DIMsIsEventsForwarded は,入力コンテキストのイベント転送状態を返します。動的イベント・フロー・モデル使用時に,クライアントからのイベント転送を開始/停止する方法については,DIMsSetEventsForward の項を参照してください。イベント・フロー・モデルについての詳細については,第1.3.3項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。

DIMsCommit

確定された文字列をクライアントに送信する関数です。

フォーマット


    void DIMsCommit (w, string, string_length)

引数

Widget w;
void *string;
int string_length;

戻り値

戻り値はありません。

説明

DIMsCommit は,確定された文字列をクライアントの入力コンテキストに送信します。クライアントは,XmbLookupString() または XwcLookupString を使用して,確定された文字列を得ることができます。入力スタイルが on-the-spot の場合,IMS プログラマは,DIMsPreEditDone(w) を呼び出した後にこの関数を呼び出さなければならないことに注意してください。

この呼び出しは,createICCb(),または reason 引数として DimCR_CreateIC を設定するようなコールバックでは,クライアントと IMS の接続がまだ確立されていないため使用できないことに注意してください。このようなコールバックの詳細については,setAreaCb の項およびそれ以降のいくつかの項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
string 確定された文字列を指定します。エンコーディングについては DIMsEncoding() によって返される値に一致する必要があります。詳細については DIMsEncoding の項を参照してください。IMS プログラマは,このデータにメモリを割り当てたら呼び出し後に解放する必要があります。
string_length string のバイト数を指定します。

DIMsEncoding

クライアントと IMS とで同意したエンコーディングを返す関数です。

フォーマット


    char *DIMsEncoding (w)

引数

Widget w;

戻り値

クライアントと IMS が同意したエンコーディングを指定するヌル終了文字列を返します。

説明

DIMsEncoding によってクライアントと IMS が同意したエンコーディングを取得することができます。クライアントが XOpenIM() を呼び出すと,XIM ライブラリは使用するエンコーディングについて IMS と折衝し,同意されたエンコーディングが DIMs ウィジェット・データとして IMSSL に保持されます。このエンコーディングは,前編集文字列 (on-the-spot の場合),確定された文字列,および resetICCb に返される文字列に使用されます。

この関数が返す文字列は解放されてはなりません。

エンコーディングの設定方法についての詳細は,第1.4.7項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。

DIMslocale

DIMs ウィジェットに対応する入力コンテキストのロケールを返す関数です。

フォーマット


    char *DIMsLocale (w)

引数

Widget w;

戻り値

入力コンテキストのロケールを指定するヌル終了文字列が返されます。

説明

DIMsLocale によって,入力コンテキストのローケル情報を取得することができます。クライアントが XOpenIM を呼び出すと,Xim に対応するロケールが IMS に送信されます。IMSSL は,このロケールを DIMs ウィジェット・データとして保持します。

返される文字列は解放されてはなりません。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。

DIMsInputStyle

DIMs ウィジェットに対応する入力コンテキストの入力スタイルを返す関数です。

フォーマット


    XIMStyle DIMsInputStyle (W)

引数

Widget w;

戻り値

入力コンテキストの入力スタイルを指定する XIMStyle 型の値を返します。

説明

DIMsInputStyle によって,入力コンテキストの入力スタイルが取得されます。クライアントが XCreateIC() を呼び出す場合には,入力スタイルを指定して,IMS に送信する必要があります。IMSSL は,この入力スタイルを DIMs ウィジェットのデータとして保持します。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。

DIMsClientWindow

DIMs ウィジェットに対応する入力コンテキストの XNClientWindow の XIC 値を返す関数です。

フォーマット


    Window DIMsClientWindow (W)

引数

Widget w;

戻り値

入力コンテキストのクライアント・ウィンドウを指定する Window 型の値を返します。

説明

DIMsClientWindow は,入力コンテキストのクライアント・ウィンドウを取得します。クライアントが XCreateIC() を呼び出す場合には,クライアント・ウィンドウを指定する必要があります。IMSSL は,このクライアント・ウィンドウをウィジェット・データとして保持します。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。

DIMsFocusWindow

DIMs ウィジェットに対応する入力コンテキストの XNFocusWindow の XIC 値を返す関数です。

フォーマット


    Window DIMsFocusWindow (w)

引数

Widget w;

戻り値

入力コンテキストのフォーカス・ウィンドウを指定する Window 型の値を返します。

説明

DIMsFocusWindow は,入力コンテキストのフォーカス・ウィンドウを取得します。クライアントが,XCreateIC() または XSetICValues() を呼び出す場合には,フォーカス・ウィンドウを指定する必要があります。IMSSL は,このウィンドウをウィジェット・データとして保持します。フォーカス・ウィンドウが指定されない場合は,クライアント・ウィンドウが返されます。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。

DIMsUserData

入力コンテキストの固有データを返す関数です。

フォーマット


    Opaque *DIMsUserData (w)

引数

Widget w;

戻り値

入力コンテキストの固有データを指すポインタを返します。データ型は任意です。

説明

DIMsUserData は,入力コンテキストの固有データを取得します。このデータは,クライアントが XCreateIC() を呼び出し,コールバックが呼び出される場合に,IMS プログラマによって作成されます。コールバックについての詳細は,createICCb の項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。

DIMsSetTriggerKeys

すべてのクライアントのトリガ・キーを変更する関数です。

フォーマット


    void DIMsSetTriggerKeys (new_keys)

引数

DIMsTriggerKeys new_keys;

戻り値

戻り値はありません。

説明

DIMsSetTriggerKeys は,IMS のトリガ・オン/オフのためのキーを変更します。この呼び出しによって,すべての DIMs クラスの DIMsNtriggerKeys リソースが変更され,新しいトリガ・キーがすべてのクライアントに送信されます。イベント・フロー・モデルにおけるトリガ・キーについては,第1.3.3項を参照してください。

この呼び出しは,createICCb(),または reason 引数として DimCR_CreateIC を設定するようなコールバックでは,クライアントと IMS の接続がまだ確立されていないため使用できないことに注意してください。このようなコールバックの詳細については,setAreaCb の項およびそれ以降のいくつかの項を参照してください。

new_keys IMS の新しいトリガ・キーを指定します。DIMsTriggerKeys のデータ型の定義は第1.4.8項を参照してください。IMS プログラマは,このポインタを後で解放しなければなりません。

getExtIMValuesCb

このコールバック関数は,拡張 (非標準) XIM の属性値を取得するために呼び出されます。

フォーマット


    int getExtIMValuesCb  (client_data, attributes, 
                                   value_len, value)

引数

Opaque *client_data;
char *attributes;
short *value_len; (呼び出し側へ返す)
Oparque **value; (呼び出し側へ返す)

戻り値

このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます

説明

getExtIMValues は,リソース DIMsNgetExtIMValuesCb によって指定されるコールバック関数です。DIMsNgetExtIMValuesCb については,第1.4.13項を参照してください。IMS は,拡張 (非標準) XIM のいくつかの属性を定義することができ,クライアントは,XGetIMValues を呼び出してこれらの属性の値を検索することができます。IMS に拡張 XIM 属性を追加する方法については,第1.4.4項を参照してください。

client_data リソース DIMsNclientdata によって指定されるデータのポインタを指定します。詳細については,第1.4.41項を参照してください。
attributes XIM 属性名を指定します。
value_len 属性値のサイズ (バイト単位) を呼び出し元へ返します。value のデータ型が string_t ではない場合,このフィールドは任意です。第1.4.4項を参照してください。
value 呼び出し側に属性値のポインタを返します。IMS プログラマは,このデータにメモリを割り当てなければなりません。これは後に IMSSL によって解放されます。

createICCb

このコールバック関数は,入力コンテキストおよびそれに対応する DIMs ウィジェットが作成される場合に呼び出されます。

フォーマット


    int createICCb (w, client_data, widget_data)

引数

Widget w;
Opaque *client_data;
Opaque **widget_data; 呼び出し側へ返す

戻り値

コールバックが正常終了した場合,IMSSL に 1 が返されます。コールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

createICCb は,リソース DIMsNcreateICCb によって指定されるコールバック関数です。DIMsNcreateICCb については,第1.4.10項を参照してください。この段階ではクライアントと IMS はまだ接続されていないため,このコールバックで次のルーチンを呼び出すことはできません。
DIMsPreEditStart()
DIMsPreEditDone()
DIMsPreEditDraw()
DIMsPreEditCaret()
DIMsStatusStart()
DIMsStatusDone()
DIMsStatusDraw()
DIMsGeometryNegotiation()
DIMsSetEventsForward()
DIMsCommit()
DIMsSetTriggerKeys()

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data リソース DIMsNclientdata によって指定されるデータのポインタを指定します。DIMsNclientdata についての詳細は,第1.4.41項を参照してください。
widget_data ウィジェットに対応する入力コンテキスト固有データのポインタを呼び出し側に返します。このデータは,DIMsUserData(w) を呼び出して後で検索することができます。IMS プログラマは,このデータにメモリ割り当て,destroyICCb を使用して解放する必要があります。

destroyICCb

このコールバック関数は,入力コンテキストおよびそれに対応する DIMs ウィジェットを破棄する場合に呼び出されます。

フォーマット


    int destroyICCb (w, client_data)

引数

Widget w;
Opaque *client_data;

戻り値

コールバックが正常終了した場合,IMSSL に 1 が返されます。コールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

destroyICCb は,リソース DIMsNdestroyICCb によって指定されるコールバック関数です。DIMsNdestroyICCb については,第1.4.11項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data リソース DIMsNclientdata によって指定されるデータのポインタを指定します。DIMsNclientdataについては,第1.4.41項を参照してください。

setExtICValuesCb

このコールバック関数は,拡張 (非標準) XIC 属性の値を設定する場合に呼び出されます。

フォーマット


    int setExtICValuesCb  (w, client_data, attributes,
                                  value_len, value, 
				  attribute_flag, reason)

引数

Widget w;
Opaque *client_data;
char *attributes;
short value_len;
Opaque *value;
DIMsAttributesType attribute_flag;
int reason;

戻り値

コールバックが正常終了した場合,IMSSL に 1 が返されます。コールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

setExtICValuesCb は,リソース DIMsNsetExtICValuesCb によって指定されるコールバック関数です。DIMsNsetExtICValuesCb については,第1.4.12項を参照してください。IMS はいくつかの拡張 (非標準) XIC 属性を定義でき,クライアントは,XSetICValues を呼び出してこれらの属性の値を設定することができます。IMS に拡張 XIC 属性を追加する方法については,第1.4.5項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data リソース DIMsNclientdata によって指定されるデータのポインタを指定します。DIMsNclientdata については,第1.4.41項を参照してください。
attributes 拡張 XIC 値の名称を指定します。
value_len value フィールドのサイズ (バイト単位) を指定します。この属性のデータ型が string_t でない場合,このフィールドは無視できます。第1.4.4項を参照してください。
value 属性値のポインタを指定します。属性値のデータ型は任意ですが,IMS プログラマは,実際のデータ型へのポインタを属性に従ってキャストする必要があります。
attribute_flag XIC の属性の型を指定します。DIMsAttributeType のデータ型は次のとおりです。
typedef enum {
            GenericAttributesType,
            PreeditAttributesType,
            StatusAttributesType
}DIMsAttributesType;

GenericAttributesType は,XIC の値が PreeditAttribute および StatusAttribute のどちらにも属さないことを示します。

PreeditAttributesType は,XIC の値が PreeditAttribute に属すことを示します。

StatusAttributesType は,XIC の値が StatusAttribute に属すことを示します。

reason コールバックの理由を指定します。DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し,DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。

getExtICValuesCb

このコールバック関数は,拡張 (非標準) XIC 属性の値を取得するために呼び出されます。

フォーマット


    int getExtICValuesCb  (w, client_data, attribute,
                                  value_len, value, attr_flag)

引数

Widget w;
Opaque *client_data;
char *attributes;
short *value_len; (呼び出し側へ返す)
Opaque **value; (呼び出し側へ返す)
DIMsAttributesType attr_flag;

戻り値

コールバックが正常終了した場合,IMSSL に 1 が返されます。コールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

getExtICValuesCb は,リソース DIMsNgetExtICValuesCb によって指定されるコールバック関数です。DIMsNgetExtICValuesCb については第1.4.13項を参照してください。IMS はいくつかの拡張 (非標準) XIC の属性を定義することができ,クライアントは XGetICValues() を呼び出してこれらの属性の値を検索することができます。IMS に拡張 XIC 属性を追加する方法については,第1.4.5項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data リソース DIMsNclientdata によって指定されるデータのポインタを指定します。DIMsNclientdata については第1.4.41項を参照してください。
attributes 拡張 XIC 値の名称を指定します。
value_len value フィールドのサイズ (バイト単位) を呼び出し側に返します。この属性のデータ型が string_t でない場合,このフィールドは無視できます。第1.4.4項を参照してください。
value 属性値のポインタを呼び出し側に返します。IMS プログラマは,このデータにメモリを割り当てなければなりません。このメモリは,IMSSL によって後で解放されます。
attr_flag 属性の型を指定します。データ型の定義については setExtICValuesCb の項を参照してください。

setICFocusCb

このコールバック関数は,入力コンテキストがフォーカスを取得した場合に呼び出されます。

フォーマット


    int setICFocusCb (w, client_data)

引数

Widget w;
Opaque *client_data;

戻り値

コールバックが正常終了した場合,IMSSL に 1 が返されます。コールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

setICFocusCb は,リソース DIMsNsetICFocusCb によって指定されるコールバック関数です。DIMsNsetICFocusCb については,第1.4.14項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data リソース DIMsNclientdata によって指定されるデータのポインタを指定します。DIMsNclientdata については第1.4.41項を参照してください。

unsetICFocusCb

このコールバック関数は,入力コンテキストがフォーカスを失った場合に呼び出されます。

フォーマット


    int unsetICFocusCb (w, client_data)

引数

Widget w;
Opaque *client_ data;

戻り値

コールバックが正常終了した場合,IMSSL に 1 が返されます。コールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

setICFocusCb は,リソース DIMsNunsetICFocusCb によって指定されるコールバック関数です。DIMsNunsetICFocusCb については,第1.4.15項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data リソース DIMsNclientdata によって指定されるデータのポインタを指定します。DIMsNclientdata については第1.4.41項を参照してください。

resetICCb

このコールバック関数は,入力コンテキストが再設定される場合に呼び出されます。

フォーマット


    int resetICCb  (w, client_data, string, string_length)

引数

Widget w;
Opaque *client_data;
void **string; (呼び出し側へ返す)
int *string_length; (呼び出し側へ返す)

戻り値

コールバックが正常終了した場合,IMSSL に 1 が返されます。コールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

resetICCb は,リソース DIMsNresetICCb によって指定されるコールバック関数です。DIMsNresetICCb については第1.4.16項を参照してください。現在の前編集セッションは,このコールバックが実行されてから終了します。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data リソース DIMsNclientdata によって指定されるデータのポインタを指定します。DIMsNclientdata については,第1.4.41項を参照してください。
string DIMsEncoding(w) によって与えられたエンコーディングで現在の前編集文字列を返します。IMS プログラマは,このデータにメモリを割り当てなければなりません。このメモリは IMSSL によって後で解放されます。
string_length string のバイト数を返します。

processEventCb

このコールバック関数は,入力コンテキストが IMS にイベントを転送する場合に呼び出されます。

フォーマット


    int processEventCb  (w, client_data, event, send_back)

引数

Widget w;
Opaque *client_data;
XEvent *event;
Boolean *send_back; (呼び出し側へ返す)

戻り値

コールバックが正常終了した場合,IMSSL に 1 が返されます。コールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

processEventCb は,リソース DIMsNprocessEventCb によって指定されるコールバック関数です。DIMsNprocessEventCb については,第1.4.17項を参照してください。

クライアントが XNFilterEvent() を呼び出すと,XFilterEvent の値を取得する XGetICValues 関数で IMS によって選択されたイベントが IMS に転送され,このコールバックを呼び出します (IMS に必要なイベントの選択方法については getFilterEventsCb の項を参照してください)。IMS によっては,これらのイベントは,文字列の確定,前編集セッションの開始または終了,あるいはその他の状況を引き起こします。

ただし,入力スタイルが on-the-spot の場合,1 つの KeyPress イベントで DIMsCommit,DIMsPreEditDone,および DIMsPreEditStart を同時に呼び出すことはできません。同時に呼び出すと,クライアントは,確定文字列およびコールバックを正しい順序で得ることができません。このため,KeyPress イベントで DIMsPreEditDone と DIMsCommit を呼び出したあとで,対応する KeyRelease イベントで DIMsPreEditStart を呼び出して次の前編集セッションを開始してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data リソース DIMsNclientdata によって指定されるデータのポインタを指定します。DIMsNclientdata については,第1.4.41項を参照してください。
event クライアントから転送するイベントを指定します。
send_back イベントをクライアントに返送するかどうかを指定します。True が返されると XFilterEvent はクライアントに False を返し,False の場合,イベントはクライアントによって破棄されます。

setAreaCb

このコールバック関数は,XIC 属性 XNArea の値を設定するために呼び出されます。

フォーマット


    int setAreaCb  (w, client_data, reason, attribut_flag)

引数

Widget w;
Opaque *client_data;
int reason;
XRectangle *value;
DIMsAttributesType attribute_flag;

戻り値

このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

setAreaCb は,リソース DIMsNsetAreaCb によって指定されるコールバック関数です。DIMsNsetAreaCb については,第1.4.18項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data リソース DIMsNclientdata によって指定されるデータへのポインタを指定します。DIMsNclientdata については,第1.4.41項を参照してください。
reason コールバックの理由を指定します。DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し,DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。
value XRectangle タイプの属性値へのポインタを指定します。
attribute_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性のタイプを指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。

setAreaNeededCb

このコールバック関数は,XIC 属性 XNAreaNeeded の値を設定するために呼び出されます。

フォーマット


    int setAreaNeededCb  (w, client_data, reason, value,
                                 attribute_flag)

引数

Widget w;
Opaque *client_data;
int reason;
XRectangle *value;
DIMsAttributesType attribute_flag;

戻り値

このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

setAreaNeededCb は,リソース DIMsNsetAreaNeededCb によって指定されるコールバック関数です。DIMsNsetAreaNeededCb については,第1.4.19項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data リソース DIMsNclientdata によって指定されるデータへのポインタを指定します。DIMsNclientdata については,第1.4.41項を参照してください。
reason コールバックの理由を指定します。DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し,DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。
value XRectangle タイプの属性値へのポインタを指定します。
attribute_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性のタイプを指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。

setSpotLocationCb

このコールバック関数は,XIC 属性 XNSpotLocation の値を設定するために呼び出されます。

フォーマット


    int setSpotLocationCb  (w, client_data, reason, value, 
                                    attr_flag)

引数

Widget w;
Opaque *client_data;
int reason;
XPoint *value;
DIMsAttributesType attr_flag;

戻り値

このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

setSpotLocationCb は,リソース DIMsNsetSpotLocationCb によって指定されるコールバック関数です。DIMsNsetSpotLocationCb については,第1.4.20項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data リソース DIMsNclientdata によって指定されるデータへのポインタを指定します。DIMsNclientdata についての詳細は,第1.4.41項を参照してください。
reason コールバックの理由を指定します。DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し,DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。
value XPoint タイプの属性値へのポインタを指定します。
attri_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性のタイプを指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。

setColormapCb

このコールバック関数は,XIC 属性 XNColormap の値を設定するために呼び出されます。

フォーマット


    int setColormapCb  (w, client_data, reason, value, 
                                attribute_flag)

引数

Widget w;
Opaque *client_data;
int reason;
Colormap *value;
DIMsAttributesType attribute_flag;

戻り値

このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

setColormapCb は,リソース DIMsNsetColormapCb によって指定されるコールバック関数です。DIMsNsetColormapCb については,第1.4.21項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data リソース DIMsNclientdata によって指定されるデータへのポインタを指定します。DIMsNclientdata についての詳細は,第1.4.41項を参照してください。
reason コールバックの理由を指定します。DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し,DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。
value Colormap タイプの属性値へのポインタを指定します。
attribute_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性のタイプを指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。

setStdColormapCb

このコールバック関数は,XIC 属性 XNStdColormap の値を設定するために呼び出されます。

フォーマット


    int setStdColormapCb  (w, client_data, reason, value, 
                                   attr_flag)

引数

Widget w;
Opaque *client_data;
int reason;
Atom *value;
DIMsAttributesType attr_flag;

戻り値

このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

setStdColormapCb は,リソース DIMsNsetStdColormapCb によって指定されるコールバック関数です。DIMsNsetStdColormapCb については,第1.4.22項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data リソース DIMsNclientdata によって指定されるデータへのポインタを指定します。DIMsNclientdata についての詳細は,第1.4.41項を参照してください。
reason コールバックの理由を指定します。DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し,DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。
value Atom タイプの属性値へのポインタを指定します。
attri_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性のタイプを指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。

setForegroundCb

このコールバック関数は,XIC 属性 XNForeground の値を設定するために呼び出されます。

フォーマット


    int setForegroundCb  (w, client_data, reason, value, 
                                  attribute_flag)

引数

Widget w;
Opaque *client_data;
int reason;
unsigned long *value;
DIMsAttributesType attribute_flag;

戻り値

このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

setForegroundCb は,リソース DIMsNsetForegroundCb によって指定されるコールバック関数です。DIMsNsetForegroundCb については,第1.4.23項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data リソース DIMsNclientdata によって指定されるデータへのポインタを指定します。DIMsNclientdata についての詳細は,第1.4.41項を参照してください。
reason コールバックの理由を指定します。DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し,DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。
value 符号なし long タイプの属性値へのポインタを指定します。
attribute_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性のタイプを指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。

setBackgroundCb

このコールバック関数は,XIC 属性 XNBackground の値を設定するために呼び出されます。

フォーマット


    int setBackgroundCb  (w, client_data, reason, value, 
                                  attribute_flag)

引数

Widget w;
Opaque *client_data;
int reason;
unsigned long *value;
DIMsAttributesType attribute_flag;

戻り値

このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

setBackgroundCb は,リソース DIMsNsetBackgroundCb によって指定されるコールバック関数です。DIMsNsetBackgroundCb については,第1.4.24項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data リソース DIMsNclientdata によって指定されるデータへのポインタを指定します。DIMsNclientdata についての詳細は,第1.4.41項を参照してください。
reason コールバックの理由を指定します。DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し,DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。
value 符号なし long タイプの属性値へのポインタを指定します。
attribute_flag PreeditAttribute またはStatusAttribute のどちらに属するか,XIC 属性のタイプを指定します。DIMsAttributesType のデータ型については,setExtICValuesCbの 項を参照してください。

setBgPixmapCb

このコールバック関数は,XIC 属性 XNBackgroundPixmap の値を設定するために呼び出されます。

フォーマット


    int setBgPixmapCb  (w, client_data, reason, value,
                               attribute_flag)

引数

Widget w;
Opaque *client_data;
int reason;
Pixmap *value;
DIMsAttributesType attribute_flag;

戻り値

このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

setBgPixmapCb は,リソース DIMsNsetBgPixmapCb によって指定されるコールバック関数です。DIMsNsetBgPixmapCb については,第1.4.25項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data リソース DIMsNclientdata によって指定されるデータへのポインタを指定します。DIMsNclientdata についての詳細は,第1.4.41項を参照してください。
reason コールバックの理由を指定します。DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し,DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。
value Pixmap タイプの属性値へのポインタを指定します。
attribute_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性のタイプを指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。

setFontSetCb

このコールバック関数は,XIC 属性 XNFontSet の値を設定するために呼び出されます。

フォーマット


    int setFontSetCb  (w, client_data, reason, value, 
                               attribute_flag)

引数

Widget w;
Opaque *client_data;
int reason;
XFontSet *value;
DIMsAttributesType attribute_flag;

戻り値

このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

setFontSetCb は,リソース DIMsNsetFontSetCb によって指定されるコールバック関数です。DIMsNsetFontSetCb については,第1.4.26項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data リソース DIMsNclientdata によって指定されるデータへのポインタを指定します。DIMsNclientdata についての詳細は,第1.4.41項を参照してください。
reason コールバックの理由を指定します。DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し,DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。
value XFontSet タイプの属性値へのポインタを指定します。
attribute_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性のタイプを指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。

setLineSpaceCb

このコールバック関数は,XIC 属性 XNLineSpace の値を設定するために呼び出されます。

フォーマット


    int setLineSpaceCb  (w, client_data, reason, value, 
                                 attribute_flag)

引数

Widget w;
Opaque *client_data;
int reason;
int *value;
DIMsAttributesType attribute_flag;

戻り値

このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

setLineSpaceCb は,リソース DIMsNsetLineSpaceCb によって指定されるコールバック関数です。DIMsNsetLineSpaceCb については,第1.4.27項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data リソース DIMsNclientdata によって指定されるデータへのポインタを指定します。DIMsNclientdata についての詳細は,第1.4.41項を参照してください。
reason コールバックの理由を指定します。DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し,DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。
value integer タイプの属性値へのポインタを指定します。
attribute_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性のタイプを指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。

setCursorCb

このコールバック関数は,XIC 属性 XNCursor の値を設定するために呼び出されます。

フォーマット


    int setLineSpaceCb  (w, client_data, reason, value, 
                                 attribute_flag)

引数

Widget w;
Opaque *client_data;
int reason;
Cursor *value;
DIMsAttributesType attribute_flag;

戻り値

このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

setCursorCb は,リソース DIMsNsetCursorCb によって指定されるコールバック関数です。DIMsNsetCursorCb については,第1.4.28項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data リソース DIMsNclientdata によって指定されるデータへのポインタを指定します。DIMsNclientdata についての詳細は,第1.4.41項を参照してください。
reason コールバックの理由を指定します。DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し,DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。
value Cursor タイプの属性値へのポインタを指定します。
attribute_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性のタイプを指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。

getFilterEventsCb

このコールバック関数は,XIC 属性 XNFilterEvents の値を得るために呼び出されます。

フォーマット


    int getFilterEventsCb (w, client_data, value)

引数

Widget w;
Opaque *client_data;
unsigned long **value; (呼び出し側へ返す)

戻り値

このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

getFilterEventsCb は,リソース DIMsNgetFilterEventsCb で指定されるコールバック関数です。DIMsNgetFilterEventsCb については,第1.4.29項を参照してください。

このコールバック・リソースが設定されていない場合,IMSSL は省略時のイベント・マスクとして KeyPressMask | KeyReleaseMask をクライアントへ返します。この値が返された場合は,クライアントから IMS へのイベント・フローが増えることによりネットワークのアクティビティが増加し,IMS の性能に直接影響するため注意が必要です。必要ないイベント・マスクは削除するようにしてください。たとえば,DIMs ウィジェットの入力スタイルが on-the spot でない場合は,KeyReleaseMask の使用を削除することができます。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data DIMsNclientdata リソースで指定されるデータへのポインタを指定します。 DIMsNclientdata についての詳細は,第1.4.41項を参照してください。
value 呼び出し側に,符号なし long 型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。このメモリ割り当ては IMSSL によって後で解放されます。

getAreaCb

このコールバック関数は,XIC 属性 XNArea の値を得るために呼び出されます。

フォーマット


    int getAreaCb (w, client_data, value, attribute_flag)

引数

Widget w;
Opaque *client_data;
XRectangle **value; (呼び出し側へ返す)
DIMsAttributesType attribute_flag;

戻り値

このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

getAreaCb は,リソース DIMsNgetAreaCb で指定されるコールバック関数です。DIMsNgetAreaCb については,第1.4.30項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data DIMsNclientdata リソースで指定されるデータへのポインタを指定します。DIMsNclientdata についての詳細は,第1.4.41項を参照してください。
value 呼び出し側に,XRectangle 型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。このメモリ割り当ては IMSSL によって後で解放されます。
attribute_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。

getAreaNeededCb

このコールバック関数は,XIC 属性 XNAreaNeeded の値を得るために呼び出されます。

フォーマット


    int getAreaNeededCb  (w, client_data, value, 
                                  attribute_flag)

引数

Widget w;
Opaque *client_data;
XRectangle **value; (呼び出し側へ返す)
DIMsAttributesType attribute_flag;

戻り値

このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

getAreaNeededCb は,リソース DIMsNgetAreaNeededCb で指定されるコールバック関数です。DIMsNgetAreaNeededCb については,第1.4.31項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data DIMsNclientdata リソースで指定されるデータへのポインタを指定します。DIMsNclientdata についての詳細は,第1.4.41項を参照してください。
value 呼び出し側に,XRectangle 型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。このメモリ割り当ては IMSSL によって後で解放されます。
attribute_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。

getSpotLocationCb

このコールバック関数は,XIC 属性 XNSpotLocation の値を得るために呼び出されます。

フォーマット


    int getSpotLocationCb  (w, client_data, value, 
                                    attribute_flag)

引数

Widget w;
Opaque *client_data;
XPoint **value; (呼び出し側へ返す)
DIMsAttributesType attribute_flag;

戻り値

このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

getSpotLocationCb は,リソース DIMsNgetSpotLocationCb リソースによって指定されるコールバック関数です。DIMsNgetSpotLocationCb については,第1.4.32項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data DIMsNclientdata リソースで指定されるデータへのポインタを指定します。DIMsNclientdata についての詳細は,第1.4.41項を参照してください。
value 呼び出し側に,XPoint 型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。このメモリ割り当ては IMSSL によって後で解放されます。
attribute_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。

getColormapCb

このコールバック関数は,XIC 属性 XNColormap の値を得るために呼び出されます。

フォーマット


    int getColormapCb  (w, client_data, value, 
                                attribute_flag)

引数

Widget w;
Opaque *client_data;
Colormap **value; (呼び出し側へ返す)
DIMsAttributesType attribute_flag;

戻り値

このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

getColormapCb は,リソース DIMsNgetColormapCb で指定されるコールバック関数です。DIMsNgetColormapCb については,第1.4.33項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data リソース DIMsNclientdata によって指定されるデータへのポインタを指定します。DIMsNclientdata については,第1.4.41項を参照してください。
value 呼び出し側に,Colormap 型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。このメモリ割り当ては IMSSL によって後で解放されます。
attribute_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。

getStdColormapCb

このコールバック関数は,XIC 属性 XNStdColormap の値を得るために呼び出されます。

フォーマット


    int getStdColormapCb (w, client_data, value, 
                                  attribute_flag)

引数

Widget w;
Opaque *client_data;
Atom **value; (呼び出し側ヘ返す)
DIMsAttributesType attribute_flag;

戻り値

このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

getStdColormapCb は,リソース DIMsNgetStdColormapCb によって指定されるコールバック関数です。DIMsNgetStdColormapCb については,第1.4.34項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data DIMsNclientdata リソースで指定されるデータへのポインタを指定します。DIMsNclientdata については,第1.4.41項を参照してください。
value 呼び出し側に,Atom 型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。このメモリ割り当ては IMSSL によって後で解放されます。
attribute_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。

getForegroundCb

このコールバック関数は,XIC 属性 XNForeground の値を得るために呼び出されます。

フォーマット


    int getForegroundCb (w, client_data, value,
                                  attribute_flag)

引数

Widget w;
Opaque *client_data;
unsigned long **value; (呼び出し側ヘ返す)
DIMsAttributesType attribute_flag;

戻り値

このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

getForegroundCb は,リソース DIMsNgetForegroundCb で指定されるコールバック関数です。DIMsNgetForegroundCb については,第1.4.35項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data DIMsNclientdata リソースで指定されるデータへのポインタを指定します。DIMsNclientdata については,第1.4.41項を参照してください。
value 呼び出し側に,符号なし long 型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。このメモリ割り当ては IMSSL によって後で解放されます。
attribute_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。

getBackgroundCb

このコールバック関数は,XIC 属性 XNBackground の値を得るために呼び出されます。

フォーマット


    int getBackgroundCb (w, client_data, value, 
                                 attribute_flag)

引数

Widget w;
Opaque *client_data;
unsigned long **value; (呼び出し側ヘ返す)
DIMsAttributesType attribute_flag;

戻り値

このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

getBackgroundCb は,リソース DIMsNgetBackgroundCb で指定されるコールバック関数です。DIMsNgetBackgroundCb については,第1.4.36項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data DIMsNclientdata リソースで指定されるデータへのポインタを指定します。DIMsNclientdata については,第1.4.41項を参照してください。
value 呼び出し側に,符号なし long 型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。このメモリ割り当ては IMSSL によって後で解放されます。
attribute_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。

getBgPixmapCb

このコールバック関数は,XIC 属性 XNBackgroundPixmap の値を得るために呼び出されます。

フォーマット


    int getBgPixmapCb (w, client_data, value, attribute_flag)

引数

Widget w;
Opaque *client_data;
Pixmap **value; (呼び出し側ヘ返す)
DIMsAttributesType attribute_flag;

戻り値

このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

getBgPixmapCb は,リソース DIMsNgetBgPixmapCb で指定されるコールバック関数です。DIMsNgetBgPixmapCb については,第1.4.37項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data DIMsNclientdata リソースで指定されるデータへのポインタを指定します。DIMsNclientdata については,第1.4.41項を参照してください。
value 呼び出し側に,Pixmap 型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。このメモリ割り当ては IMSSL によって後で解放されます。
attribute_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。

getFontSetCb

このコールバック関数は,XIC 属性 XNFontSet の値を得るために呼び出されます。

フォーマット


    int getFontSetCb (w, client_data, value, attribute_flag)

引数

Widget w;
Opaque *client_data;
XFontSet **value; (呼び出し側に返す)
DIMsAttributesType attribute_flag;

戻り値

このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

getFontSetCb は,リソース DIMsNgetFontSetCb で指定されるコールバック関数です。DIMsNgetFontSetCb については,第1.4.38項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data DIMsNclientdata リソースで指定されるデータへのポインタを指定します。DIMsNclientdata については,第1.4.41項を参照してください。
value 呼び出し側に,XFontSet 型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。このメモリ割り当ては IMSSL によって後で解放されます。
attribute_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。

getLineSpaceCb

このコールバック関数は,XIC 属性 XNLineSpace の値を得るために呼び出されます。

フォーマット


    int getLineSpaceCb (w, client_data, value, attribute_flag)

引数

Widget w;
Opaque *client_data;
int **value; (呼び出し側ヘ返す)
DIMsAttributesType attribute_flag;

戻り値

このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

getLineSpaceCb は,リソース DIMsNgetLineSpaceCb で指定されるコールバック関数です。DIMsNgetLineSpaceCb については,第1.4.39項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data DIMsNclientdata リソースで指定されるデータへのポインタを指定します。DIMsNclientdata については,第1.4.41項を参照してください。
value 呼び出し側に,整数型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。このメモリ割り当てはIMSSLによって後で解放されます。
attribute_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。

getCursorCb

このコールバック関数は,XIC 属性 XNCursor の値を得るために呼び出されます。

フォーマット


    int getCursorCb (w, client_data, value, attribute_flag)

引数

Widget w;
Opaque *client_data;
Cursor **value; (呼び出し側ヘ返す)
DIMsAttributesType attribute_flag;

戻り値

このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。

説明

getCursorCb は,リソース DIMsNgetCursorCb で指定されるコールバック関数です。DIMsNgetCursorCb については,第1.4.40項を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data DIMsNclientdata リソースで指定されるデータへのポインタを指定します。DIMsNclientdata については,第1.4.41項を参照してください。
value 呼び出し側に,Cursor 型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。このメモリ割り当ては IMSSL によって後で解放されます。
attribute_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。

1.6 サンプル・ファイル

入力サーバに関するサンプル・ファイルが /usr/i18n/usr/examples/input_server ディレクトリに用意されています。このサンプル・ファイルを参照することにより,API の使用方法をより明確に理解することができるでしょう。

1.6.1 Imakefile

次のような Imakefile が用意されています。IMS の開発に必要なすべての API およびデータ構造体を含むヘッダ・ファイルは,/usr/i18n/usr/include/DIMs/DIMsDef.h ディレクトリにあります。IMSSL は,シェアード・ライブラリ /usr/shlib/libDIMs.so として実装されています。また,シェアード・ライブラリを使用したくない IMS プログラマのために,アーカイブ・ライブラリ /usr/i18n/usr/lib/libDIMs.a を提供しています。

/* use /usr/bin/X11/xmkmf to make Makefile */
LOCAL_LIBRARIES = -lDIMs -lXt -lX11
EXTRA_DEFINES = -DXK_LATIN1
NormalProgramTarget(IMS_example,IMS_example.o,,$(LOCAL_LIBRARIES),)
DependTarget()

1.6.2 ソース・プログラム

/*
 * *****************************************************************
 * *                                                               *
 * *    Copyright (c) Digital Equipment Corporation, 1991, 1996    *
 * *                                                               *
 * *   All Rights Reserved.  Unpublished rights  reserved  under   *
 * *   the copyright laws of the United States.                    *
 * *                                                               *
 * *   The software contained on this media  is  proprietary  to   *
 * *   and  embodies  the  confidential  technology  of  Digital   *
 * *   Equipment Corporation.  Possession, use,  duplication  or   *
 * *   dissemination of the software and media is authorized only  *
 * *   pursuant to a valid written license from Digital Equipment  *
 * *   Corporation.                                                *
 * *                                                               *
 * *   RESTRICTED RIGHTS LEGEND   Use, duplication, or disclosure  *
 * *   by the U.S. Government is subject to restrictions  as  set  *
 * *   forth in Subparagraph (c)(1)(ii)  of  DFARS  252.227-7013,  *
 * *   or  in  FAR 52.227-19, as applicable.                       *
 * *                                                               *
 * *****************************************************************
 */
/*
 * HISTORY
 */
/*
*****************************************************************************

              Copyright (c) Digital Equipment Corporation, 1990
              All Rights Reserved.  Unpublished rights reserved
              under the copyright laws of the United States.

              The software contained on this media is proprietary
              to and embodies the confidential technology of
              Digital Equipment Corporation.  Possession, use,
              duplication or dissemination of the software and
              media is authorized only pursuant to a valid written
              license from Digital Equipment Corporation.

              RESTRICTED RIGHTS LEGEND   Use, duplication, or
              disclosure by the U.S. Government is subject to
              restrictions as set forth in Subparagraph (c)(1)(ii)
              of DFARS 252.227-7013, or in FAR 52.227-19, as
              applicable.

*****************************************************************************
 *
 * IMS_example.c
 *
 * This is an example of how to write an Input Method Server for X11R6.
 * The only protocol being used in here is Xi18n and the transport mechanism
 * is X.
 *
 * In this example, there are only 26 composed characters, which are
 * formed by 2 consecutive key inputs which are equal. These key inputs
 * should be from a-z, case insensitive. The lookup string
 * will be found from an array, which is some kind of small-scale dictionary.
 *
 * You should load Iso-latin 1 keymap files in order to work properly for
 * this example.
 *
 * You can start this example using four of the languages:
 * Korean, Traditional Chinese, Simplied Chinese and Japanese
 *
 * To start this IMServer, set the xnllanguage resource properly, for example,
 * if you want to input Korean text, you should set the session language to
 * Korean, or simply start as
 *  %IMS_example -xnllanguage ko_KR.deckorean
 *
 * To connect a client to this IMS, simply start up this IMS as a background
 * job, then start the client with the correct language setting and XMODIFIERS
 * environment. There are 4 modifiers that can be set according to locales :
 * "zh_tw_exam", "zh_cn_exam", "ko_kr_exam", ja_jp_exam". For example,
 *
 *  %setenv XMODIFIERS @im=ko_kr_exam
 *      %dxcardfiler -xnllanguage ko_KR.deckorean
 */

#include <X11/Intrinsic.h>
#include <X11/keysymdef.h>
#include <DIMsDef.h>

static char my_dictionary[26][2] =  {0xa1, 0xa1,
       0xa1, 0xa2,
       0xa1, 0xa3,
       0xa1, 0xa4,
       0xa1, 0xa5,
       0xa1, 0xa6,
       0xa1, 0xa7,
       0xa1, 0xa8,
       0xa1, 0xa9,
       0xa1, 0xaa,
       0xa1, 0xab,
       0xa1, 0xac,
       0xa1, 0xad,
       0xa1, 0xae,
       0xa1, 0xaf,
       0xa1, 0xb1,
       0xa1, 0xb2,
       0xa1, 0xb3,
       0xa1, 0xb4,
       0xa1, 0xb5,
       0xa1, 0xb6,
       0xa1, 0xb7,
       0xa1, 0xb8,
       0xa1, 0xb9,
       0xa1, 0xba,
       0xa1, 0xbb};

typedef struct {
   char data[1];
   int  num_char;
} MyDataRec, *MyData;  /* This is the input context specific data */

static int CreateICCallback(w, client_data, widget_data)
Widget w;
Opaque *client_data;
Opaque **widget_data;
{
    MyData my_data = (MyData)XtMalloc(sizeof(MyDataRec));

    if (!my_data)
 return 0; /* fail */

    my_data->num_char = 0;
    *widget_data = (Opaque *)my_data;

    return 1; /* success */
}

static int DestroyICCallback(w, client_data, widget_data)
Widget w;
Opaque *client_data;
{
     MyData my_data = (MyData)DIMsUserData(w);

     if (my_data)
 XtFree((char *)my_data);

     return 1; /* success */
}

static int GetFilterEventsCallback(w, client_data, mask)
Widget w;
Opaque *client_data;
unsigned long **mask;
{
   *mask = (unsigned long *) XtMalloc(sizeof(unsigned long));

/*  Since this IMS supports root-window style only, so just KeyPress
    events are necessary */

   **mask = (unsigned long)(KeyPressMask);

   return 1;
}

static int ProcessEventCallback(w, client_data, event, send_back)
Widget w;
Opaque *client_data;
XEvent *event;
Boolean *send_back;
{

    MyData my_data = (MyData)DIMsUserData(w);
    Display *dpy  = XtDisplay(w);

    *send_back = True;

    switch (event->type)
    {
       case KeyPress :
     {
  KeyCode keycode = event->xkey.keycode;
  KeySym keysym;
  char second_char;
  XTextProperty text_property;
  char *text_list[1];
  char text[3];

  keysym = XKeycodeToKeysym( dpy, keycode, 0 );
  if ((keysym >= XK_A && keysym <= XK_Z) ||
      (keysym >= XK_a && keysym <=XK_z))
  {
     if (my_data->num_char)
     {
        if (keysym >= XK_a)
    second_char = keysym - XK_a;
        else
        second_char = keysym - XK_A;
        if (second_char == my_data->data[0])
        { /* two consecutive key are equal, send commit string */
    text[0] = my_dictionary[second_char][0];
    text[1] = my_dictionary[second_char][1];
    text[2] = '\0';
    text_list[0] = text;
    XmbTextListToTextProperty(dpy, text_list, 1,
     XCompoundTextStyle, &text_property);
    DIMsCommit(w, (char *)text_property.value,
    strlen((char *)text_property.value)+1);
    XtFree((char *)text_property.value);
    *send_back = False; /* the key is used by IMS,
      no need to return to client */
        }
        my_data->num_char = 0; /* reset to 0*/
     } else {
        my_data->num_char = 1;
        if (keysym >= XK_a)
    my_data->data[0] = keysym - XK_a;
        else
        my_data->data[0] = keysym - XK_A;
        *send_back = False;
     }
  }
      break;
     }
      default :
     break;
    }

    return 1;
}

IgnorXErrors(dpy, event)
    Display *dpy;
    XErrorEvent *event;
{
    return 0;
}

main(argc, argv)
int argc;
char **argv;
{
    Widget toplevel;
    XtAppContext app_context;
    DIMsClassCtx ctx;
    char *zh_tw_server_strings[] = {"_XIM_zh_TW@zh_tw_exam"};
    char *zh_cn_server_strings[] = {"_XIM_zh_CN@zh_cn_exam"};
    char *ko_kr_server_strings[] = {"_XIM_ko_KR@ko_kr_exam"};
    char        *ja_jp_server_strings[] = {"_XIM_ja_JP@ja_jp_exam"};
    XIMStyle support_styles[1] = {XIMPreeditNothing | XIMStatusNothing};
    DIMsLocaleInfoRec locale;
    DIMsStringListRec server_names;
    DIMsSupportStylesRec im_styles;
    Cardinal n;
    Arg al[40];
    DIMsVersionRec im_version;

    XtSetLanguageProc(NULL, NULL, NULL);

    toplevel = XtAppInitialize(&app_context, "example", NULL, 0,
    &argc, argv, NULL, NULL, 0);

/* set up DIMs Class */
/* This example targets to work for 4 locales: zh_TW, ja_JP, zh_CN, ko_KR.
   Therefore many DIMs class contexts are created */
/* create contexts for locales zh_TW, ja_JP, zh_CN, ko_KR */

    locale.language = "zh_TW";
    locale.num_support_codesets = 0;
    locale.support_codesets = NULL;

    server_names.num_of_strings = 1;
    server_names.string_names = zh_tw_server_strings;

    im_styles.num_support_styles = 1;
    im_styles.support_styles = support_styles;

    n = 0;
    XtSetArg( al[n], DIMsNlocale, &locale);n++;
    XtSetArg( al[n], DIMsNserverName, &server_names);n++;
    /* use Xi18n protocol */
    im_version.highest_major_version = 3;
    im_version.highest_minor_version = 0;
    im_version.lowest_major_version = 3;
    im_version.lowest_minor_version = 0;
    XtSetArg( al[n], DIMsNversion, &im_version);n++;
    XtSetArg( al[n], DIMsNsupportStyles, &im_styles);n++;
    XtSetArg( al[n], DIMsNcreateICCb, CreateICCallback);n++;
    XtSetArg( al[n], DIMsNdestroyICCb, DestroyICCallback);n++;
    XtSetArg( al[n], DIMsNprocessEventCb, ProcessEventCallback);n++;
    XtSetArg( al[n], DIMsNgetFilterEventsCb, GetFilterEventsCallback);n++;
    XtSetArg( al[n], DIMsNtransport, "X/");n++;
    ctx = DIMsClassCtxCreate(NULL, "zh_tw_xi18n_exam", al, n);

    locale.language = "zh_CN";
    server_names.string_names = zh_cn_server_strings;
    XtSetArg( al[0], DIMsNlocale, &locale);
    XtSetArg( al[1], DIMsNserverName, &server_names);
    ctx = DIMsClassCtxCreate(ctx, "zh_cn_xi18n_exam", al, n);

    locale.language = "ko_KR";
    server_names.string_names = ko_kr_server_strings;
    XtSetArg( al[0], DIMsNlocale, &locale);
    XtSetArg( al[1], DIMsNserverName, &server_names);
    ctx = DIMsClassCtxCreate(ctx, "ko_kr_xi18n_exam", al, n);

    locale.language = "ja_JP";
    server_names.string_names = ja_jp_server_strings;
    XtSetArg( al[0], DIMsNlocale, &locale);
    XtSetArg( al[1], DIMsNserverName, &server_names);
    ctx = DIMsClassCtxCreate(ctx, "ja_jp_xi18n_exam", al, n);

    XSetErrorHandler(IgnorXErrors);

/* Initialize IMSSL */
    DIMsSLInitialize(toplevel, ctx);

/* Realize widget hierrachy */
    XtRealizeWidget(toplevel);

/* Initialize protocol layer */
    DIMsProtoInit(toplevel, app_context);

    XtAppMainLoop(app_context);
}