この章では,DECのプラットホーム上で,X11R5 XIMライブラリを使用してクライアントと通信するためのX11R5 入力サーバを作成する際に必要な情報を記述します。
日本語OpenVMSオペレーティング・システムでは,通信メカニズムに関する詳しい知識がなくても入力サーバを作成できるようなアプリケーション・ プログラミング・インタフェース(API)を提供しています。
名前 | 説明 |
---|---|
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 クラスにリソースを設定します。 |
X11R5におけるX入力メソッド(XIM)の採用に伴い,世界中の言語をサポートするソフトウェアを開発するためのプログラミング・ インタフェースが提供されています。 日本語,中国語,韓国語などの言語は入力メソッドが複雑なため, 通常,各クライアント・プロセスから入力サーバ(IMS)を起動して, 各国語の入力を実現しています。
このような入力モデルは,クライアント/サーバと呼ばれ,XIMライブラリ( クライアント)とIMSとの間に通信プロトコルを設定する必要があります。OpenVMS では,X Windowシステムのクライアント間通信メカニズムに基づくDEC 独自のプロトコル層を導入しています。このプロトコルをDECXim プロトコルと呼びます。IMSプログラマの開発作業をより簡素化するために,DEC では入力サーバのサービス層(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クラスのリソースを設定するだけでよいのです。
図 6-1に,IMSSLの構造と各構成要素の関係を示します。
イベント処理モデルには,FrontEndメソッドおよびBackEndメソッドの2種類があります。
FrontEndメソッドでは,クライアント・ウィンドウの入力イベントは,X サーバによってIMSライブラリとXIMライブラリの両方に直接渡されます。 FrontEndメソッドは,対話式の前編集において優れた性能を提供します。 ただしFrontEndモデルでは,IMSが処理するキー・イベントとクライアントが処理する他のイベントとの間で, 同期化の問題が発生します。このため,FrontEnd メソッドではキー・イベントの損失または重複が発生することがあります。
BackEndメソッドでは,クライアント・ウィンドウの入力イベントは,XIM ライブラリに渡したあとIMSに渡されます。各イベントは渡された順でシリアルに処理されるため,XIM ライブラリとIMSライブラリとの間で同期化の問題は発生しません。BackEnd メソッドを使用すると,IMライブラリは, すべてのKeyPressとKeyRelease,およびイベント・フロー制御で必要とするその他のイベントをIMS に転送し,IMSと同期をとります。
DECXimプロトコルは,BackEndモデルのみをサポートしています。
DECXimプロトコルは,XIMライブラリとIMS間の通信のために静的イベント・ フローおよび動的イベント・フローの2種類のイベント・フロー・モデルをサポートしています。
静的イベント・フローでは,入力キー・イベントがクライアントからIMS に常に送信されます。
動的イベント・フローでは,処理が必要なキー・イベントだけがクライアントからIMS に送信されます。たとえば,ASCII文字と漢字を組み合わせて入力する場合,ASCII 文字はIMSで処理する必要はないのでキー・イベントをIMS に送信する必要はありませんが,漢字を形成するために必要なキー・ イベントはIMSに送信しなければなりません。
動的イベント・フロー・モデルをサポートするには,IMSプログラマはトリガ・ オン・キー・リストをクライアントに送信する必要があります( 詳細は,第6.4.8項を参照)。 クライアントは, トリガ・オン・キー・リストに含まれるキーを受信して初めて, キー・イベントをIMSに送信します。IMSプログラマがトリガ・オフ・キー・ リストを提供している場合,トリガ・オフ・キー・リストに含まれるキーを受信すると, クライアントはIMSへのイベントの送信を停止します。IMS がトリガ・オフ・キー・リストを提供していない場合,IMSはトリガ・ オフ・キーをチェックするためにAPIを呼び出し,イベント・ フローを停止します。詳細は,第6.5節のDIMsSetEventsForwardの項を参照してください。
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のサーバ名です。サーバ名の設定方法についての詳細は, 第6.4.2項を参照してください。
OpenVMSのIMSSLは,IMSの開発者に以下のような機能を提供します。
各DIMsウィジェットは,ウィジェット自身の動作を決定する一連のデータを持っています。 これをDIMsクラスと呼びます。この節では,DIMsクラスの各リソースの意味とその使用方法を説明します。
次の表に,プログラマがデータを指定するために使用するDIMsクラスのリソースを示します。 各リソースは,DIMsSetTriggerKeys()を使用して設定および変更を行うDIMsNtriggerKeys を除いて,DIMsClassCtxCreate() 使用時にのみ設定できます。 DIMsClassCtxCreate()およびDIMsSetTriggerKeys()については,第6.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 |
以下の項で,これらのリソースについて説明します。
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 についての詳細は,第6.5 節を参照してください。
このリソースはDIMsクラスの作成に必須です。
接続に使用される一連のアトム名を指定します。このリソースの値は, DIMsStringList型で,次の構造体へのポインタです。
typedef struct_DIMsStringList { short num_of_strings; char **string_names; } DIMsStringListRec, *DIMsStringList;
num_of_stringsフィールドには,接続に使用される別名の数を指定します。 string_namesフィールドには,接続に使用されるアトムの名前を指定するヌル終了文字列の配列を指定します。 たとえばOpenVMS では,日本語IMSの省略時の名前はDECであり,次のようなアトムが作成されます。
_XIM_ja_JP@DEC
@DECで終わるアトムはDEC専用ですので,同じ名前でアトムを作成しないでください。OpenVMS XIM とIMSとの接続方法については,第6.3.2項および第6.3.3 項を参照してください。
このリソースはDIMsクラスの作成に必須です。
DIMsウィジェットがサポートするDECXimプロトコルのバージョンを範囲で指定します。 このリソースの値は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クラスがサポートするDECXim プロトコルの最高メジャー・バージョンを指定します。
highest_minor_versionフィールドには,DIMsクラスがサポートするDECXim プロトコルの最高マイナー・バージョンを指定します。
lowest_major_versionフィールドには,DIMsクラスがサポートするDECXim プロトコルの最低メジャー・バージョンを指定します。
lowest_major_versionフィールドには,DIMsクラスがサポートするDECXim プロトコルの最低マイナー・バージョンを指定します。
XIMライブラリはバージョンをチェックしてDIMsがサポートされているかどうかを判断します。 たとえば,日本語OpenVMSではDECXimプロトコルV1.0 だけがサポートされているので,フィールドの省略時の値は次のとおりです。
このリソースは任意です。
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値の名前を定義します。この値はヌル終了文字列でなければなりません。
このリソースは任意です。
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値の名前を定義します。この値はヌル終了文字列でなければなりません。
このリソースは任意です。
DIMsウィジェットがサポートする入力スタイルを指定します。このリソースの値は DIMsSupportStyles型で,次の構造体へのポインタです。
typedef struct_DIMsSupportStyles { short num_support_styles; XIMStyle *support_styles; } DIMsSupportStylesRec, *DIMsSupportStyles;
num_support_stylesフィールドには,サポートする入力スタイルの数を指定します。 support_stylesフィールドには, XIMStyleの配列を指定します。
クライアントがIMSと接続したら,クライアントが選択した入力スタイルをDIMsInputStyle(w) を使用して得ることができます。DIMsInputStyleについての詳細は 第6.5節を参照してください。
このリソースは必須です。
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についての詳細は,第6.5節を参照してください。
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 についての詳細は, 第6.5節を参照してください。
このリソースは任意です。このリソースを指定しない場合は静的イベント・ フローが使用されるため,すべてのイベントがクライアントからIMS に転送されます。イベント・フロー・モデルについての詳細は,第6.3.3項を参照してください。
拡張XIM属性の値を得るために,クライアントがXGetIMValuesを呼び出すときに呼び出されるコールバックを指定します。 詳細については,第6.5節を参照してください。
このリソースは任意です。
クライアントがXCreateICを呼び出すときに呼び出されるコールバックを指定します。 このコールバックを呼び出す前にDIMsウィジェットが作成されます。IMS プログラマは,すべての初期化作業を行い,通常はDIMsウィジェットに対応する入力メソッド特定データを作成する必要があります。 詳細については,第6.5節を参照してください。
このリソースは任意です。
クライアントがXDestroyICを呼び出すときに呼び出されるコールバックを指定します。IMS プログラマは,DIMsウィジェット作成時に作成したすべてのデータを解放しなければなりません。 詳細については,第6.5節を参照してください。
このリソースは任意です。
拡張XIC属性の値を設定するために,クライアントがXSetICValuesを呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは任意です。
拡張XIC属性の値を取得するために,クライアントがXGetICValuesを呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは任意です。
クライアントがXSetICFocusを呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは任意です。
クライアントがXUnsetICFocusを呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは任意です。
クライアントがXmbResetICまたはXwcResetICを呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5 節を参照してください。
このリソースは任意です。
クライアントがIMSに要求されたイベントを転送するときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは必須です。
XIC属性の1つとしてXNAreaを設定するために,クライアントがXSetICValues を呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは任意です。
XIC属性の1つとしてXNAreaNeededを設定するために,クライアントがXSetICValues を呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは任意です。
XIC属性の1つとしてXNSpotLocationを設定するために,クライアントがXSetICValues を呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは任意です。
XIC属性の1つとしてXNColormapを設定するために,クライアントがXSetICValues を呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは任意です。
XIC属性の1つとしてXNStdColormapを設定するために,クライアントがXSetICValues を呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは任意です。
XIC属性の1つとしてXNForegroundを設定するために,クライアントがXSetICValues を呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは任意です。
XIC属性の1つとしてXNBackgroundを設定するために,クライアントがXSetICValues を呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは任意です。
XIC属性の1つとしてXNBackgroundPixmapを設定するために,クライアントがXSetICValues を呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは任意です。
XIC属性の1つとしてXNFontSetを設定するために,クライアントがXSetICValues を呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは任意です。
XIC属性の1つとしてXNLineSpaceを設定するために,クライアントがXSetICValues を呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは任意です。
XIC属性の1つとしてXNCursorを設定するために,クライアントがXSetICValues を呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは任意です。
XIC属性の1つとしてXNFilterEventsを取得するために,クライアントがXGetICValues を呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは任意です。このリソースが指定されない場合,IMSSLはKeyPressMask | KeyReleaseMask をクライアントに返します。
XIC属性の1つとしてXNAreaを取得するために,クライアントがXGetICValues を呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは任意です。
XIC属性の1つとしてXNAreaNeededを取得するために,クライアントがXGetICValues を呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは任意です。
XIC属性の1つとしてXNSpotLocationを取得するために,クライアントがXGetICValues を呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは任意です。
XIC属性の1つとしてXNColormapを取得するために,クライアントがXGetICValues を呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは任意です。
XIC属性の1つとしてXNStdColormapを取得するために,クライアントがXGetICValues を呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは任意です。
XIC属性の1つとしてXNForegroundを取得するために,クライアントがXGetICValues を呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは任意です。
XIC属性の1つとしてXNBackgroundを設定するために,クライアントがXGetICValues を呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは任意です。
XIC属性の1つとしてXNBackgroundPixmapを設定するために,クライアントがXGetICValues を呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは任意です。
XIC属性の1つとしてXNFontSetを取得するために,クライアントがXGetICValues を呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは任意です。
XIC属性の1つとしてXNLineSpaceを設定するために,クライアントがXGetICValues を呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは任意です。
XIC属性の1つとしてXNCursorを設定するために,クライアントがXGetICValues を呼び出すときに呼び出されるコールバックを指定します。 詳細は,第6.5節を参照してください。
このリソースは任意です。
上記のコールバック・ルーチンへの引数の1つとして渡されるクライアント・ データを指定します。
このリソースは任意です。
この節では,コールバック・ルーチンを含むIMSSLのすべてのパブリック・ ルーチンの使用方法を記述します。
DIMsウィジェットで使用するクラス・コンテキストを作成する関数です。
DIMsClassCtx DIMsClassCtxCreate (head, name, arglist, argcount)
DIMsClassCtx | head; |
char | *name; |
ArgList | arglist; |
Cardinal | argcount; |
head | DIMsクラス・コンテキスト・ リストのヘッドを指定します。この関数をはじめて呼び出す場合は,NULL 値を渡すことができます。別のクラス・コンテキストを作成する場合には, 最初の呼び出しに対する戻り値をこの関数に渡す必要があります。 |
name | DIMsクラス名を指定します。DIMsクラス名は呼び出し後に解放されるヌル終了文字列でなければなりません。 |
arglist | DIMsクラスのリソースの名称と値を含む引数リストを指定します。 リソースに割り当てられたメモリは, 呼び出した後に解放することができます。 |
argcount | 引数リスト内の引数の数を指定します。 |
このルーチンは,DIMsClassInitializeが呼び出される前に,最低1回呼び出す必要があります。
DIMsクラスのリソースの完全な定義については,第6.4 節を参照してください。
DEC入力サーバ・サービス層(IMSSL)を初期化する関数です。
void DIMsSLInitialize (toplevel, ctx)
Widget | toplevel; |
DIMsClassCtx | ctx; |
toplevel | XtAppInitialize などによって返されるアプリケーション・シェル・ウィジェットのウィジェットID を指定します。 |
ctx | DIMsウィジェット・クラス・リストのヘッドを指定します。 |
プロトコル層を初期化する関数です。
void DIMsProtoInit (toplevel, app_context)
Widget | toplevel; |
XtAppContext | app_ context; |
toplevel | XtAppInitializeなどによって返されるアプリケーション・ シェル・ウィジェットのウィジェットID を指定します。toplevelは,この関数が呼び出される前に実現されていなければなりません。 |
app_context | IMSのアプリケーション・ コンテキストを指定します。IMSプログラマは,XtAppInitializeまたはIntrinsics アプリケーション・コンテキスト初期化ルーチンを使用することによって,IMS アプリケーション・コンテキストを得ることができます。 |
DIMsウィジェットに対応する入力コンテキストの前編集セッションを開始する関数です。
int DIMsPreEditStart (w)
Widget | w; |
戻り値-1は,前編集文字列のサイズが無制限であることを示します。
この呼び出しは,createICCb,またはreason引数としてDimCR_CreateIC を設定するようなコールバックでは,クライアントと入力サーバとの接続がまだ確立されていないため使用できないことに注意してください。 このようなコールバックの詳細については,setAreaCbの項およびそれ以降のいくつかの項を参照してください。
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
DIMsウィジェットに対応する入力コンテキストの前編集セッションを終了させる関数です。
void DIMsPreEditDone (w)
Widget | w; |
この呼び出しは,createICCb(),またはreason引数としてDimCR_CreateIC を設定するようなコールバックでは,クライアントと入力サーバとの接続がまだ確立されていないため使用できないことに注意してください。 このようなコールバックの詳細については,setAreaCbの項およびそれ以降のいくつかの項を参照してください。
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
DIMsウィジェットに対応する入力コンテキストの前編集セッションが開始されているかどうかをチェックする関数です。
Boolean DIMsIsIState (w)
Widget | w; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
DIMsウィジェットと一緒に前編集セッションを開始した入力コンテキストで, 文字列を挿入/削除/置換する関数です。
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; |
この呼び出しは,createICCb,またはreason引数としてDimCR_CreateIC を設定するようなコールバックでは,クライアントと入力サーバとの接続がまだ確立されていないため使用できないことに注意してください。 このようなコールバックの詳細については,setAreaCbの項およびそれ以降のいくつかの項を参照してください。
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
caret | 前編集文字列のカーソル・ オフセット(文字単位)を指定します。 |
chg_first | 変更部分の開始位置( 文字単位)を指定します。 |
chg_ length | 変更部分の長さ(文字単位)を指定します。 |
string | 入力コンテキストに渡す文字列を指定します。 エンコーディングはDIMsEncoding(w) の戻り値に一致しなければなりません。IMSプログラマは, このデータにメモリを割り当てたら呼び出し後に解放する必要があります。 |
string_ length | stringのバイト数を指定します。 |
renditions | 文字ごとの表示情報を持つXIMFeedbackの配列へのポインタを指定します。 |
redition_ length | reditionsの配列のサイズを指定します。 |
前編集の際にテキスト挿入位置を移動する関数です。
void DIMsPreEditCaret (w, position, direction, style)
Widget | w; | |
int | *position; | (呼び出し側へ返す) |
XIMCaretDirection | direction; | |
XIMCaretStyle; | style; |
この呼び出しは,createICCb,またはreason引数としてDimCR_CreateIC を設定するようなコールバックでは,クライアントと入力サーバとの接続がまだ確立されていないため使用できないことに注意してください。 このようなコールバックの詳細については,setAreaCbの項およびそれ以降のいくつかの項を参照してください。
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
position | 前編集文字列内のカレット・ オフセットを指定します。呼び出し後には,初期位置からの新しいオフセット値が返されます。 |
direction | カレットが移動する方向を指定します。 |
style | カレットのフィードバックを指定します。 |
DIMsウィジェットに対応する入力コンテキストの状態更新セッションを開始する関数です。
void DIMsStatusStart (w)
Widget | w; |
この呼び出しは,createICCb,またはreason引数としてDimCR_CreateIC を設定するようなコールバックでは,クライアントと入力サーバとの接続がまだ確立されていないため使用できないことに注意してください。 このようなコールバックの詳細については,setAreaCbの項およびそれ以降のいくつかの項を参照してください。
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
DIMsウィジェットに対応する入力コンテキストの状態更新セッションを終了させます。
void DIMsStatusDone (w)
Widget | w; |
この呼び出しは,createICCb,またはreason引数としてDimCR_CreateIC を設定するようなコールバックでは,クライアントと入力サーバとの接続がまだ確立されていないため使用できないことに注意してください。 このようなコールバックの詳細については,setAreaCbの項およびそれ以降のいくつかの項を参照してください。
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
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; |
この呼び出しは,createICCb,またはreason引数としてDimCR_CreateIC を設定するようなコールバックでは,クライアントと入力サーバとの接続がまだ確立されていないため使用できないことに注意してください。 このようなコールバックの詳細については,setAreaCbの項およびそれ以降のいくつかの項を参照してください。
w | 入力コンテキストに対応するDIMs を指定します。 |
type | テキストまたはビットマップのいずれを使用するかを指定します。 |
string | 状態領域を更新するためのテキストを指定する。 エンコーディングはDIMsEncoding(w)の戻り値と一致しなければなりません。 このデータにメモリを割り当てたら呼び出し後に解放する必要があります。 |
string_ length | stringのバイト数を指定します。 |
renditions | 文字ごとの表示情報を持つXIMFeedbackの配列へのポインタを指定します。 |
rendition_ length | renditionsのメンバ数を指定します。 |
bitmap | typeがXIMBitmapTypeの場合にビットマップを指定します。 |
クライアント・アプリケーションと,ジオメトリについての折衝を開始する関数です。
Boolean DIMsGeometryNegotiation (w)
Widget | w; |
この呼び出しは,createICCb,またはreason引数としてDimCR_CreateIC を設定するようなコールバックでは,クライアントと入力サーバとの接続がまだ確立されていないため使用できないことに注意してください。 このようなコールバックの詳細については,setAreaCbの項およびそれ以降のいくつかの項を参照してください。
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
DIMsウィジェットに対応する入力コンテキストへの,クライアントからのイベント転送を有効または無効にします。
void DIMsSetEventsForward (w, state)
Widget | w; |
Boolean | state; |
この呼び出しは,createICCb,またはreason引数としてDimCR_CreateIC を設定するようなコールバックでは,クライアントと入力サーバとの接続がまだ確立されていないため使用できないことに注意してください。 このようなコールバックの詳細については,setAreaCbの項およびそれ以降のいくつかの項を参照してください。
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
state | イベント・フロー状態を指定します。 クライアントによる入力コンテキストへのイベント転送を有効にする場合はTrue を指定し,クライアントがトリガオン・キーを受信するまで入力コンテキストへのイベント転送を無効にするにはFalse を指定します。 |
クライアント・アプリケーションから入力コンテキストにイベントが転送されているかどうかをチェックする関数です。
Boolean DIMsIsEventsForwarded (w)
Widget | w; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
確定された文字列をクライアン・アプリケーショントに送信する関数です。
void DIMsCommit (w, string, string_length)
Widget | w; |
void | *string; |
int | string_ length; |
この呼び出しは,createICCb,またはreason引数としてDimCR_CreateIC を設定するようなコールバックでは,クライアントと入力サーバとの接続がまだ確立されていないため使用できないことに注意してください。 このようなコールバックの詳細については,setAreaCbの項およびそれ以降のいくつかの項を参照してください。
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
string | 確定された文字列を指定します。 エンコーディングについてはDIMsEncodingによって返される値に一致する必要があります。 詳細についてはDIMsEncodingの項を参照してください。IMSプログラマは, このデータにメモリを割り当てたら呼び出し後に解放する必要があります。 |
string_length | stringのバイト数を指定します。 |
クライアント・アプリケーションと入力サーバとで同意したエンコーディングを返す関数です。
char *DIMsEncoding (w)
Widget | w; |
エンコーディングの設定方法についての詳細は,第6.4.7項を参照してください。
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
DIMsウィジェットに対応する入力コンテキストのロケールを返す関数です。
char *DIMsLocale (w)
Widget | w; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
DIMsウィジェットに対応する入力コンテキストの入力スタイルを返す関数です。
XIMStyle DIMsInputStyle (W)
Widget | w; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
DIMsウィジェットに対応する入力コンテキストのXNClientWindowのXIC値を返す関数です。
Window DIMsClientWindow (W)
Widget | w; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
DIMsウィジェットに対応する入力コンテキストのXNFocusWindowのXIC値を返す関数です。
Window DIMsFocusWindow (w)
Widget | w; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
入力コンテキストの固有データを返す関数です。
Opaque *DIMsUserData (w)
Widget | w; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
すべてのクライアントのトリガ・キーを変更する関数です。
void DIMsSetTriggerKeys (new_keys)
DIMsTriggerKeys | new_ keys; |
この呼び出しは,createICCb,またはreason引数としてDimCR_CreateIC を設定するようなコールバックでは,クライアント・アプリケーションと入力サーバの接続がまだ確立されていないため使用できないことに注意してください。 このようなコールバックの詳細については,setAreaCb の項およびそれ以降のいくつかの項を参照してください。
new_keys | IMSの新しいトリガ・ キーを指定します。DIMsTriggerKeysのデータ型の定義は第6.4.8項を参照してください。IMS プログラマは, このポインタを後で解放しなければなりません。 |
このコールバック関数は,拡張(非標準)XIMの属性値を取得するために呼び出されます。
int getExtIMValuesCb (client_data, attributes, value_len, value)
Opaque | *client_ data; | |
char | *attributes; | |
short | *value_ len; | (呼び出し側へ返す) |
Oparque | **value; | (呼び出し側へ返す) |
client_data | リソース DIMsNclientdataによって指定されるデータのポインタを指定します。 詳細については,第6.4.41項を参照してください。 |
attributes | XIM属性名を指定します。 |
value_ len | 属性値のサイズ(バイト単位)を呼び出し元へ返します。 valueのデータ型がstring_tではない場合, このフィールドは任意です。第6.4.4項を参照してください。 |
value | 呼び出し側に属性値のポインタを返します。IMS プログラマは,このデータにメモリを割り当てなければなりません。 これは後にIMSSLによって解放されます。 |
このコールバック関数は,入力コンテキストおよびそれに対応するDIMsウィジェットが作成される場合に呼び出されます。
int createICCb (w, client_data, widget_data)
Widget | w; | |
Opaque | *client_data; | |
Opaque | **widget_ data; | 呼び出し側へ返す |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdataによって指定されるデータのポインタを指定します。 DIMsNclientdataについての詳細は, 第6.4.41項を参照してください。 |
widget_data | ウィジェットに対応する入力コンテキスト固有データのポインタを呼び出し側に返します。 このデータは,DIMsUserData(w)を呼び出して後で検索することができます。IMS プログラマは,このデータにメモリ割り当て, destroyICCbを使用して解放する必要があります。 |
このコールバック関数は,入力コンテキストおよびそれに対応するDIMsウィジェットを破棄する場合に呼び出されます。
int destroyICCb (w, client_data)
Widget | w; |
Opaque | *client_ data; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdataによって指定されるデータのポインタを指定します。 DIMsNclientdataについては,第6.4.41項を参照してください。 |
このコールバック関数は,拡張(非標準)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; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdataによって指定されるデータのポインタを指定します。 DIMsNclientdataについては,第6.4.41項を参照してください。 |
attributes | 拡張XIC値の名称を指定します。 |
value_len | valueフィールドのサイズ( バイト単位)を指定します。この属性のデータ型がstring_tでない場合, このフィールドは無視できます。第6.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によってコールバックが開始されることを意味します。 |
このコールバック関数は,拡張(非標準)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; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdataによって指定されるデータのポインタを指定します。 DIMsNclientdataについては第6.4.41項を参照してください。 |
attributes | 拡張XIC値の名称を指定します。 |
value_len | valueフィールドのサイズ(バイト単位)を呼び出し側に返します。 この属性のデータ型がstring_tでない場合,このフィールドは無視できます。 第6.4.4項を参照してください。 |
value | 属性値のポインタを呼び出し側に返します。IMSプログラマは,このデータにメモリを割り当てなければなりません。 このメモリは,IMSSL によって後で解放されます。 |
attr_ flag | 属性のタイプを指定します。データ型の定義についてはsetExtICValuesCb の項を参照してください。 |
このコールバック関数は,入力コンテキストがフォーカスを取得した場合に呼び出されます。
int setICFocusCb (w, client_data)
Widget | w; |
Opaque | *client_ data; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdataによって指定されるデータのポインタを指定します。 DIMsNclientdataについては第6.4.41項を参照してください。 |
このコールバック関数は,入力コンテキストがフォーカスを失った場合に呼び出されます。
int unsetICFocusCb (w, client_data)
Widget | w; |
Opaque | *client_ data; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdataによって指定されるデータのポインタを指定します。 DIMsNclientdataについては第6.4.41項を参照してください。 |
このコールバック関数は,入力コンテキストが再設定される場合に呼び出されます。
int resetICCb (w, client_data, string, string_length)
Widget | w; | |
Opaque | *client_data; | |
void | **string; | (呼び出し側へ返す) |
int | *string_ length; | (呼び出し側へ返す) |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdataによって指定されるデータのポインタを指定します。 DIMsNclientdataについては, 第6.4.41項を参照してください。 |
string | DIMsEncoding(w)によって与えられたエンコーディングで現在の前編集文字列を返します。IMS プログラマは,このデータにメモリを割り当てなければなりません。 このメモリはIMSSLによって後で解放されます。 |
string_length | stringのバイト数を返します。 |
このコールバック関数は,入力コンテキストが入力サーバにイベントを転送する場合に呼び出されます。
int processEventCb (w, client_data, event, send_back)
Widget | w; | |
Opaque | *client_data; | |
XEvent | *event; | |
Boolean | *send_back; | (呼び出し側へ返す) |
クライアント・アプリケーションがXFilterEventを呼び出すと, XFilterEventの値を取得するXGetICValues関数で入力サーバによって選択されたイベントが入力サーバに転送され, このコールバックを呼び出します。 入力サーバに必要なイベントの選択方法についてはgetFilterEventsCbの項を参照してください。 入力サーバによっては,これらのイベントは,文字列の確定,前編集セッションの開始または終了, あるいはその他の状況を引き起こします。
ただし,入力スタイルがon-the-spotの場合,1つのKeyPressイベントでDIMsCommit ,DIMsPreEditDone,およびDIMsPreEditStartを同時に呼び出すことはできません。 同時に呼び出すと,クライアント・アプリケーションは, 確定文字列およびコールバックを正しい順序で得ることができません。 このため,KeyPressイベントでDIMsPreEditDoneとDIMsCommitを呼び出したあとで, 対応するKeyReleaseイベントでDIMsPreEditStartを呼び出して次の前編集セッションを開始してください。
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdataによって指定されるデータのポインタを指定します。 DIMsNclientdataについては,第6.4.41項を参照してください。 |
event | クライアント・アプリケーションから転送するイベントを指定します。 |
send_back | イベントをクライアント・アプリケーションに返送するかどうかを指定します。True が返されるとXFilterEventはクライアント・アプリケーションにFalse を返し,Falseの場合,イベントはクライアント・アプリケーションによって破棄されます。 |
このコールバック関数は,XIC属性XNAreaの値を設定するために呼び出されます。
int setAreaCb (w, client_data, reason, attribut_flag)
Widget | w; |
Opaque | *client_data; |
int | reason; |
XRectangle | *value; |
DIMsAttributesType | attribute_ flag; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdataによって指定されるデータへのポインタを指定します。 DIMsNclientdataについては, 第6.4.41項を参照してください。 |
reason | コールバックの理由を指定します。DimCR_CreateICまたは DimCR_SetICValuesのいずれかを指定します。DimCR_ CreateICはクライアントのXCreateICによってコールバックが開始されることを意味し, DimCR_SetICValuesはクライアントのXSetICValues によってコールバックが開始されることを意味します。 |
value | XRectangle型の属性値へのポインタを指定します。 |
attribute_flag | PreeditAttributeまたはStatusAttributeのどちらに属するか, XIC属性のタイプを指定します。DIMsAttributesTypeのデータ型については,setExtICValuesCb の項を参照してください。 |
このコールバック関数は,XIC属性XNAreaNeededの値を設定するために呼び出されます。
int setAreaNeededCb (w, client_data, reason, value, attribute_flag)
Widget | w; |
Opaque | *client_data; |
int | reason; |
XRectangle | *value; |
DIMsAttributesType | attribute_ flag; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdataによって指定されるデータへのポインタを指定します。 DIMsNclientdataについては, 第6.4.41項を参照してください。 |
reason | コールバックの理由を指定します。DimCR_CreateICまたは DimCR_SetICValuesのいずれかを指定します。DimCR_ CreateICはクライアントのXCreateICによってコールバックが開始されることを意味し, DimCR_SetICValuesはクライアントのXSetICValues によってコールバックが開始されることを意味します。 |
value | XRectangle型の属性値へのポインタを指定します。 |
attribute_flag | PreeditAttributeまたはStatusAttributeのどちらに属するか, XIC属性のタイプを指定します。DIMsAttributesTypeのデータ型については,setExtICValuesCb の項を参照してください。 |
このコールバック関数は,XIC属性XNSpotLocationの値を設定するために呼び出されます。
int setSpotLocationCb (w, client_data, reason, value, attr_flag)
Widget | w; |
Opaque | *client_ data; |
int | reason; |
XPoint | *value; |
DIMsAttributesType | attr_flag; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdataによって指定されるデータへのポインタを指定します。 DIMsNclientdataについての詳細は, 第6.4.41項を参照してください。 |
reason | コールバックの理由を指定します。DimCR_CreateICまたは DimCR_SetICValuesのいずれかを指定します。DimCR_ CreateICはクライアントのXCreateICによってコールバックが開始されることを意味し, DimCR_SetICValuesはクライアントのXSetICValues によってコールバックが開始されることを意味します。 |
value | XPoint型の属性値へのポインタを指定します。 |
attri_flag | PreeditAttribute またはStatusAttributeのどちらに属するか,XIC属性のタイプを指定します。 DIMsAttributesTypeのデータ型については,setExtICValuesCbの項を参照してください。 |
このコールバック関数は,XIC属性XNColormapの値を設定するために呼び出されます。
int setColormapCb (w, client_data, reason, value, attribute_flag)
Widget | w; |
Opaque | *client_ data; |
int | reason; |
Colormap | *value; |
DIMsAttributesType | attribute_flag; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdataによって指定されるデータへのポインタを指定します。 DIMsNclientdataについての詳細は, 第6.4.41項を参照してください。 |
reason | コールバックの理由を指定します。DimCR_CreateICまたは DimCR_SetICValuesのいずれかを指定します。DimCR_ CreateICはクライアントのXCreateICによってコールバックが開始されることを意味し, DimCR_SetICValuesはクライアントのXSetICValues によってコールバックが開始されることを意味します。 |
value | Colormap型の属性値へのポインタを指定します。 |
attribute_flag | PreeditAttribute またはStatusAttributeのどちらに属するか,XIC属性のタイプを指定します。 DIMsAttributesTypeのデータ型については,setExtICValuesCbの項を参照してください。 |
このコールバック関数は,XIC属性XNStdColormapの値を設定するために呼び出されます。
int setStdColormapCb (w, client_data, reason, value, attr_flag)
Widget | w; |
Opaque | *client_ data; |
int | reason; |
Atom | *value; |
DIMsAttributesType | attr_flag; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdataによって指定されるデータへのポインタを指定します。 DIMsNclientdataについての詳細は, 第6.4.41項を参照してください。 |
reason | コールバックの理由を指定します。DimCR_CreateICまたは DimCR_SetICValuesのいずれかを指定します。DimCR_ CreateICはクライアントのXCreateICによってコールバックが開始されることを意味し, DimCR_SetICValuesはクライアントのXSetICValues によってコールバックが開始されることを意味します。 |
value | Atom型の属性値へのポインタを指定します。 |
attri_flag | PreeditAttribute またはStatusAttributeのどちらに属するか,XIC属性のタイプを指定します。 DIMsAttributesTypeのデータ型については,setExtICValuesCbの項を参照してください。 |
このコールバック関数は,XIC属性XNForegroundの値を設定するために呼び出されます。
int setForegroundCb (w, client_data, reason, value, attribute_flag)
Widget | w; |
Opaque | *client_ data; |
int | reason; |
unsigned long | *value; |
DIMsAttributesType | attribute_ flag; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdataによって指定されるデータへのポインタを指定します。 |
reason | コールバックの理由を指定します。DimCR_CreateICまたは DimCR_SetICValuesのいずれかを指定します。DimCR_ CreateICはクライアントのXCreateICによってコールバックが開始されることを意味し, DimCR_SetICValuesはクライアントのXSetICValues によってコールバックが開始されることを意味します。 |
value | 符号なしlong 型の属性値へのポインタを指定します。 |
attribute_flag | PreeditAttribute またはStatusAttributeのどちらに属するか,XIC属性のタイプを指定します。 |
このコールバック関数は,XIC属性XNBackgroundの値を設定するために呼び出されます。
int setBackgroundCb (w, client_data, reason, value, attribute_flag)
Widget | w; |
Opaque | *client_ data; |
int | reason; |
unsigned long | *value; |
DIMsAttributesType | attribute_ flag; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdataによって指定されるデータへのポインタを指定します。 |
reason | コールバックの理由を指定します。DimCR_CreateICまたは DimCR_SetICValuesのいずれかを指定します。DimCR_ CreateICはクライアントのXCreateICによってコールバックが開始されることを意味し, DimCR_SetICValuesはクライアントのXSetICValues によってコールバックが開始されることを意味します。 |
value | 符号なしlong 型の属性値へのポインタを指定します。 |
attribute_flag | PreeditAttribute またはStatusAttributeのどちらに属するか,XIC属性のタイプを指定します。 |
このコールバック関数は,XIC属性XNBackgroundPixmapの値を設定するために呼び出されます。
int setBgPixmapCb (w, client_data, reason, value, attribute_flag)
Widget | w; |
Opaque | *client_ data; |
int | reason; |
Pixmap | *value; |
DIMsAttributesType | attribute_flag; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdataによって指定されるデータへのポインタを指定します。 |
reason | コールバックの理由を指定します。DimCR_CreateICまたは DimCR_SetICValuesのいずれかを指定します。DimCR_ CreateICはクライアントのXCreateICによってコールバックが開始されることを意味し, DimCR_SetICValuesはクライアントのXSetICValues によってコールバックが開始されることを意味します。 |
value | Pixmap型の属性値へのポインタを指定します。 |
attribute_flag | PreeditAttribute またはStatusAttributeのどちらに属するか,XIC属性のタイプを指定します。 |
このコールバック関数は,XIC属性XNFontSetの値を設定するために呼び出されます。
int setFontSetCb (w, client_data, reason, value, attribute_flag)
Widget | w; |
Opaque | *client_ data; |
int | reason; |
XFontSet | *value; |
DIMsAttributesType | attribute_flag; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdataによって指定されるデータへのポインタを指定します。 |
reason | コールバックの理由を指定します。DimCR_CreateICまたは DimCR_SetICValuesのいずれかを指定します。DimCR_ CreateICはクライアントのXCreateICによってコールバックが開始されることを意味し, DimCR_SetICValuesはクライアントのXSetICValues によってコールバックが開始されることを意味します。 |
value | XFontSet型の属性値へのポインタを指定します。 |
attribute_flag | PreeditAttribute またはStatusAttributeのどちらに属するか,XIC属性のタイプを指定します。 |
このコールバック関数は,XIC属性XNLineSpaceの値を設定するために呼び出されます。
int setLineSpaceCb (w, client_data, reason, value, attribute_flag)
Widget | w; |
Opaque | *client_ data; |
int | reason; |
int | *value; |
DIMsAttributesType | attribute_flag; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdataによって指定されるデータへのポインタを指定します。 |
reason | コールバックの理由を指定します。DimCR_CreateICまたは DimCR_SetICValuesのいずれかを指定します。DimCR_ CreateICはクライアントのXCreateICによってコールバックが開始されることを意味し, DimCR_SetICValuesはクライアントのXSetICValues によってコールバックが開始されることを意味します。 |
value | 整数型の属性値へのポインタを指定します。 |
attribute_flag | PreeditAttributeまたはStatusAttribute のどちらに属するか,XIC属性のタイプを指定します。 |
このコールバック関数は,XIC属性XNCursorの値を設定するために呼び出されます。
int setLineSpaceCb (w, client_data, reason, value, attribute_flag)
Widget | w; |
Opaque | *client_ data; |
int | reason; |
Cursor | *value; |
DIMsAttributesType | attribute_flag; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdataによって指定されるデータへのポインタを指定します。 |
reason | コールバックの理由を指定します。DimCR_CreateICまたは DimCR_SetICValuesのいずれかを指定します。DimCR_ CreateICはクライアントのXCreateICによってコールバックが開始されることを意味し, DimCR_SetICValuesはクライアントのXSetICValues によってコールバックが開始されることを意味します。 |
value | Cursor型の属性値へのポインタを指定します。 |
attribute_flag | PreeditAttribute またはStatusAttributeのどちらに属するか,XIC属性のタイプを指定します。 |
このコールバック関数は,XIC属性XNFilterEventsの値を得るために呼び出されます。
int getFilterEventsCb (w, client_data, value)
Widget | w; | |
Opaque | *client_data; | |
unsigned long | **value; | (呼び出し側へ返す) |
このコールバック・リソースが設定されていない場合,IMSSLは省略時のイベント・ マスクとしてKeyPressMask | KeyReleaseMaskをクライアント・ アプリケーションへ返します。この値が返された場合は,クライアントから入力サーバへのイベント・ フローが増えることによりネットワークの負荷が増加し,IMS の性能に直接影響するため注意が必要です。必要ないイベント・ マスクは削除するようにしてください。たとえば,DIMsウィジェットの入力スタイルがon-the spot でない場合は,KeyReleaseMaskの使用を削除することができます。
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | DIMsNclientdataリソースで指定されるデータへのポインタを指定します。 |
value | 呼び出し側に,符号なしlong 型の属性値へのポインタを返します。IMSプログラマは,このデータにメモリを割り当てる必要があります。 このメモリ割り当てはIMSSLによって後で解放されます。 |
このコールバック関数は,XIC属性XNAreaの値を得るために呼び出されます。
int getAreaCb (w, client_data, value, attribute_flag)
Widget | w; | |
Opaque | *client_data; | |
XRectangle | **value; | (呼び出し側へ返す) |
DIMsAttributesType | attribute_flag; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | DIMsNclientdataリソースで指定されるデータへのポインタを指定します。 |
value | 呼び出し側に,XRectangle型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。 このメモリ割り当てはIMSSLによって後で解放されます。 |
attribute_ flag | PreeditAttributeまたはStatusAttributeのどちらに属するか,XIC 属性のタイプを指定します。 |
このコールバック関数は,XIC属性XNAreaNeededの値を得るために呼び出されます。
int getAreaNeededCb (w, client_data, value, attribute_flag)
Widget | w; | |
Opaque | *client_data; | |
XRectangle | **value; | (呼び出し側へ返す) |
DIMsAttributesType | attribute_ flag; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | DIMsNclientdataリソースで指定されるデータへのポインタを指定します。 |
value | 呼び出し側に,XRectangle型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。 このメモリ割り当てはIMSSLによって後で解放されます。 |
attribute_ flag | PreeditAttributeまたはStatusAttributeのどちらに属するか,XIC 属性のタイプを指定します。 |
このコールバック関数は,XIC属性XNSpotLocationの値を得るために呼び出されます。
int getSpotLocationCb (w, client_data, value, attribute_flag)
Widget | w; | |
Opaque | *client_data; | |
XPoint | **value; | (呼び出し側へ返す) |
DIMsAttributesType | attribute_ flag; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | DIMsNclientdataリソースで指定されるデータへのポインタを指定します。 |
value | 呼び出し側に,XPoint型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。 このメモリ割り当てはIMSSLによって後で解放されます。 |
attribute_ flag | PreeditAttributeまたはStatusAttributeのどちらに属するか,XIC 属性のタイプを指定します。 |
このコールバック関数は,XIC属性XNColormapの値を得るために呼び出されます。
int getColormapCb (w, client_data, value, attribute_flag)
Widget | w; | |
Opaque | *client_data; | |
Colormap | **value; | (呼び出し側へ返す) |
DIMsAttributesType | attribute_ flag; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdataによって指定されるデータへのポインタを指定します。 |
value | 呼び出し側に,Colormap型の属性値へのポインタを返します。IMSプログラマは, このデータにメモリを割り当てる必要があります。このメモリ割り当てはIMSSL によって後で解放されます。 |
attribute_flag | PreeditAttributeまたはStatusAttribute のどちらに属するか,XIC属性のタイプを指定します。 |
このコールバック関数は,XIC属性XNStdColormapの値を得るために呼び出されます。
int getStdColormapCb (w, client_data, value, attribute_flag)
Widget | w; | |
Opaque | *client_data; | |
Atom | **value; | (呼び出し側ヘ返す) |
DIMsAttributesType | attribute_ flag; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | DIMsNclientdataリソースで指定されるデータへのポインタを指定します。 |
value | 呼び出し側に,Atom型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。 このメモリ割り当てはIMSSLによって後で解放されます。 |
attribute_ flag | PreeditAttributeまたはStatusAttributeのどちらに属するか,XIC 属性のタイプを指定します。 |
このコールバック関数は,XIC属性XNForegroundの値を得るために呼び出されます。
int getForegroundCb (w, client_data, value, attribute_flag)
Widget | w; | |
Opaque | *client_data; | |
unsigned long | **value; | (呼び出し側ヘ返す) |
DIMsAttributesType | attribute_ flag; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | DIMsNclientdataリソースで指定されるデータへのポインタを指定します。 DIMsNclientdataについては, 第6.4.41項を参照してください。 |
value | 呼び出し側に, 符号なしlong型の属性値へのポインタを返します。IMSプログラマは, このデータにメモリを割り当てる必要があります。このメモリ割り当てはIMSSL によって後で解放されます。 |
attribute_flag | PreeditAttributeまたはStatusAttribute のどちらに属するか,XIC属性のタイプを指定します。 |
このコールバック関数は,XIC属性XNBackgroundの値を得るために呼び出されます。
int getBackgroundCb (w, client_data, value, attribute_flag)
Widget | w; | |
Opaque | *client_data; | |
unsigned long | **value; | (呼び出し側ヘ返す) |
DIMsAttributesType | attribute_ flag; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | DIMsNclientdataリソースで指定されるデータへのポインタを指定します。 |
value | 呼び出し側に,符号なしlong 型の属性値へのポインタを返します。IMSプログラマは,このデータにメモリを割り当てる必要があります。 このメモリ割り当てはIMSSLによって後で解放されます。 |
attribute_ flag | PreeditAttributeまたはStatusAttributeのどちらに属するか,XIC 属性のタイプを指定します。 |
このコールバック関数は,XIC属性XNBackgroundPixmapの値を得るために呼び出されます。
int getBgPixmapCb (w, client_data, value, attribute_flag)
Widget | w; | |
Opaque | *client_data; | |
Pixmap | **value; | (呼び出し側ヘ返す) |
DIMsAttributesType | attribute_ flag; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | DIMsNclientdataリソースで指定されるデータへのポインタを指定します。 |
value | 呼び出し側に,Pixmap型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。 このメモリ割り当てはIMSSLによって後で解放されます。 |
attribute_ flag | PreeditAttributeまたはStatusAttributeのどちらに属するか,XIC 属性のタイプを指定します。 |
このコールバック関数は,XIC属性XNFontSetの値を得るために呼び出されます。
int getFontSetCb (w, client_data, value, attribute_flag)
Widget | w; | |
Opaque | *client_data; | |
XFontSet | **value; | (呼び出し側に返す) |
DIMsAttributesType | attribute_ flag; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | DIMsNclientdataリソースで指定されるデータへのポインタを指定します。 |
value | 呼び出し側に,XFontSet型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。 このメモリ割り当てはIMSSLによって後で解放されます。 |
attribute_ flag | PreeditAttributeまたはStatusAttributeのどちらに属するか,XIC 属性のタイプを指定します。 |
このコールバック関数は,XIC属性XNLineSpaceの値を得るために呼び出されます。
int getLineSpaceCb (w, client_data, value, attribute_flag)
Widget | w; | |
Opaque | *client_data; | |
int | **value; | (呼び出し側ヘ返す) |
DIMsAttributesType | attribute_ flag; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | DIMsNclientdataリソースで指定されるデータへのポインタを指定します。 |
value | 呼び出し側に,整数型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。 このメモリ割り当てはIMSSLによって後で解放されます。 |
attribute_ flag | PreeditAttributeまたはStatusAttributeのどちらに属するか,XIC 属性のタイプを指定します。 |
このコールバック関数は,XIC属性XNCursorの値を得るために呼び出されます。
int getCursorCb (w, client_data, value, attribute_flag)
Widget | w; | |
Opaque | *client_data; | |
Cursor | **value; | (呼び出し側ヘ返す) |
DIMsAttributesType | attribute_ flag; |
w | 入力コンテキストに対応するDIMs ウィジェットを指定します。 |
client_data | DIMsNclientdataリソースで指定されるデータへのポインタを指定します。 DIMsNclientdataについては, 第6.4.41項を参照してください。 |
value | 呼び出し側に,Cursor 型の属性値へのポインタを返します。IMSプログラマは, このデータにメモリを割り当てる必要があります。このメモリ割り当てはIMSSL によって後で解放されます。 |
attribute_flag | PreeditAttributeまたはStatusAttribute のどちらに属するか,XIC属性のタイプを指定します。 |
日本語OpenVMSでは,入力サーバに関するサンプル・ファイルがDECW$EXAMPLES ディレクトリに用意されています。このサンプル・ファイルを参照することにより,API の使用方法をより明確に理解することができるでしょう。
以下に示すようなコマンド・プロシージャが用意されています。これにより, 実行可能な入力サーバをビルドできます。ソースに使われた必要なプログラミング・ インターフェイスおよびデータ構造を定義するヘッダ・ファイルは,DECW$INCLUDE:DIMSDEF.H にあります。IMSSLは共有ライブラリSYS$SHARE:DECW$DIMSLIBSHR.EXE として提供されます。
/* ***************************************************************************** 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 X11R5 * 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.korean * * 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. For example, * %setenv XMODIFIERS @im=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); } 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[1] = keysym - XK_A; *send_back = False; } } break; } default : break; } } main(argc, argv) int argc; char **argv; { Widget toplevel; XtAppContext app_context; DIMsClassCtx zh_tw_ctx, ja_jp_ctx, zh_cn_ctx, ko_kr_ctx; char *server_strings[] = {"exam"}; XIMStyle support_styles[1] = {XIMPreeditNothing | XIMStatusNothing}; DIMsLocaleInfoRec locale; DIMsStringListRec server_names; DIMsSupportStylesRec im_styles; Cardinal n; Arg al[30]; 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 4 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 = 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++; 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++; zh_tw_ctx = DIMsClassCtxCreate(NULL, "zh_tw_exam", al, n); locale.language = "ja_JP"; XtSetArg( al[0], DIMsNlocale, &locale); ja_jp_ctx = DIMsClassCtxCreate(zh_tw_ctx, "ja_jp_exam", al, n); locale.language = "zh_CN"; XtSetArg( al[0], DIMsNlocale, &locale); zh_cn_ctx = DIMsClassCtxCreate(zh_tw_ctx, "zh_cn_exam", al, n); locale.language = "ko_KR"; XtSetArg( al[0], DIMsNlocale, &locale); ko_kr_ctx = DIMsClassCtxCreate(zh_tw_ctx, "ko_kr_exam", al, n); /* Initialize IMSSL */ DIMsSLInitialize(toplevel, zh_tw_ctx); /* Realize widget hierrachy */ XtRealizeWidget(toplevel); /* Initialize protocol layer */ DIMsProtoInit(toplevel, app_context); XtAppMainLoop(app_context); }