HP OpenVMS Systems Documentation  | 
    
本書では,弊社のプラットフォーム上で, X11R6 XIM ライブラリを使用してクライアントと通信するための X11R6 入力サーバを作成する際に必要な情報を記述します。
オペレーティング・システム: 日本語 HP OpenVMS Alpha V7.3-1
ソフトウェア・バージョン: 日本語 HP DECwindows Motif for OpenVMS V1.3
© 2003 日本ヒューレット・パッカード株式会社
Motif,OSF/1 および UNIX は The Open Group の商標です。
本書に記載のあるその他すべての製品名は,それぞれの会社の商標または登録商標です。
| 次へ | 目次 | 
このドキュメントでは,弊社のプラットホーム上で, X11R6 XIM ライブラリを使用してクライアントと通信するための X11R6 入力サーバを作成する際に必要な情報を記述します。
本書は,日本語 HP DECwindows Motif for OpenVMS を使用して日本語アプリケーションの開発を行うプログラマを対象にしています。
本書では,以下の表記法を使用します。
| Ctrl/x | Ctrl/xは,Ctrlキーを押しながら,別のキーまたはポインティング装置のボタンを押すことを示します。 | 
| [Return] | 例中の四角で囲まれたキー名は,キーボード上の対応するキーを押すことを示します(文中ではキー名は四角で囲まれていません)。 | 
| ... | 例中の水平の反復記号は,以下のいずれかを示します。
 
 
 
  | 
| 
.
 . .  | 
垂直の反復記号は,コード例やコマンド形式で項目が省略されていることを示します。 | 
| ( ) | 形式の説明で,括弧は,複数のオプションを選択するときに,選択したオプション全体を括弧で囲まなければならないことを示します。 | 
| [ ] | 形式の説明で,大括弧で囲まれた項目は,省略可能な項目を示します。何も選択しないか,1つの項目を選択するか,またはすべての項目を選択します(ただし,ファイル指定におけるディレクトリ名,および代入文における部分文字列指定では,大括弧を省略することはできません)。 | 
| 太字 | 太字のテキストは,新しい用語の紹介,引数名,属性または理由を示します。
 太字のテキストは,オンライン版ドキュメントでのユーザ入力を示すのにも使用します。  | 
| 数字 | 特に指定しない限り,文中のすべての数字は10進数で示します。他の基数---2進数, 8進数,または16進数---の場合は明確に示します。 | 
OpenVMS オペレーティング・システムでは,通信メカニズムに関する詳しい知識がなくても入力サーバを作成できるようなアプリケーション・プログラミング・インタフェース (API) を提供しています。
1.1 用語
| 名前 | 説明 | 
|---|---|
| IMS
 (Input Method Server)  | 
入力サーバ。 XIMライブラリからの入力キー・イベントおよびプロトコルを受信および処理し,前編集と文字列の確定を行うプロセスです。 | 
| IMSSL
 (Input Method Server Service Layer )  | 
IMSの開発に必要なすべてのAPIが含まれている層です。 | 
| DECXimプロトコル | 弊社の入力メソッド・プロトコルです。 | 
| IMSプログラマ | IMSの開発者です。 | 
| DIMsウィジェット
 (Digital Input Method Server widget)  | 
クライアントがXCreateIC()を実行するときに作成されるウィジェットです。 DIMsウィジェットは,クライアントのXICオブジェクトを処理する基本単位です。 | 
| DIMクラス | DIMsウィジェットの特性と動作を決定するオブジェクトです。IMSプログラマはこのDIMsクラスにリソースを設定します。 | 
日本語,中国語,韓国語といったアジア言語環境では文字入力メソッドが複雑なため,文字入力メソッド部分は通常,アプリケーションから独立したサーバ・プロセスとして構成されます。ウィンドウ環境においては,入力サーバ (IMS) がその役割を受け持ちます。
OpenVMS では,入力サーバとクライアント間の通信は 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の構造
イベント処理モデルには,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を検索します。これらは弊社が提供するIMSのサーバ名です。サーバ名の設定方法についての詳細は, 
第 1.4.2 項 を参照してください。
1.3.5 IMSSLの機能
OpenVMSのIMSSLは,IMSの開発者に以下のような機能を提供します。
各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 | 
| DIMsNtriggerNotifyCb | NULL | XPointer | O | 
| DIMsNtransport | X/ | char | O | 
| DIMsNsetStringConversionCb | NULL | XPointer | O | 
| DIMsNsetStringConversionCallbackCb | NULL | XPointer | O | 
| DIMsNsetResetStateCb | NULL | XPointer | O | 
| DIMsNgetResetStateCb | NULL | XPointer | O | 
| DIMsNsetHotKeyCb | NULL | XPointer | O | 
| DIMsNgetHotKeyCb | NULL | XPointer | O | 
| DIMsNsetHotKeyStateCb | NULL | XPointer | O | 
| DIMsNgetHotKeyStateCb | NULL | XPointer | O | 
| DIMsNsetPreeditStateCb | NULL | XPointer | O | 
| DIMsNgetPreeditStateCb | NULL | XPointer | O | 
| DIMsNsetPreeditStateCallbackCb | NULL | XPointer | O | 
| 次へ | 目次 |