DBCS OS/2 32bit Input Method Part1

テーマ:
eComStation 2.0 日本語版&シルバーカトラリーのお部屋-how to type Japanese on eComStation

この記事は「OS/2 32bit Input Method」と題して、Warp4 J-POCKET CD-ROM (J_POCET\BOOKS\TOOLKIT\IM32.INF) に収録されている OS/2 32ビット・インプット・メソッド Final Programming Functional Specifications Release 1.0 の情報を eComStation 2.0 RC7 日本語版のスクリーンショットとともにお送りしたいと思います。


まえがき

新しいIM(Input Method)はユーザー・インタフェースを簡単に作成できるようにデザインされています。
参照資料

OS/2 WARP CP Programming Guide, G25H-7101 (GB88-5593)
OS/2 WARP CP Programming Reference, G25H-7102 (GB88-5605)
OS/2 WARP PM Basic Programming Guide, G25H-7103 (GB88-5594)
OS/2 WARP PM Advanced Programming Guide, G25H-7104 (GB88-5595)
OS/2 WARP PM Programming Ref Vol I, G25H-7190 (GB88-5600)
OS/2 WARP PM Programming Ref Vol II, G25H-7191 (GB88-5610)
OS/2 WARP GPI Programming Guide, G25H-7106 (GB88-5606)
OS/2 WARP GPI Programming Ref, G25H-7107 (GB88-5607)
OS/2 DBCS Version 2.0 IME Specification Revision 2.11 (5/16/1994)
OS/2 DBCS Version 2.0 IMP Specification Revision 2.0 (8/29/1995)

(Win95 との比較記事は省略)

IMモジュール
IMモジュールとOS/2のモジュールの関係を示したものです。

$eComStation 2.0 日本語版&シルバーカトラリーのお部屋-IM Module

  1. KBD DD は、KBDイベントを生成し、PMWINへ渡します。

  2. PMWIN は、KBDイベントをIMへ渡します。 PMWINは、IMにいくつかのイベント(フォーカス変更、 コードページ変更)を通知します。

  3. IMは、KBDイベントをIMEに渡します。IMは、いくつかのイベント(入力モード変更など)をImeNotifyEvent (IME_NE_KEYEVENT)によって、IMEに通知します。

  4. IMEは、IMに対してIM情報(変換文字列、入力モード、候補列ウィンドウなど)を表示するように、ImRequestEventを用いてリクエストします。IMEは、IMに対してImRequestEventによって生成された確定文字列を知らせます。

  5. IMは、アプリケーションのウィンドウ・プロシージャに、IMの状況が変わったことを知らせます。

  6. アプリケーションは、WinDefWindowProcによってIMの情報をそのまま戻す場合もあります。

  7. IMは、IM状況の情報を表示するためにパートクラスを要求します。

  8. IMは、PMWINに変換テーブルを変えるように要求します。 IMは、PMWINに対して確定文字列を返します。

  9. PMWINは、KBDイベントと確定文字列をアプリケーションに返します。

  10. IMは、アプリケーションからコントロール可能です。 また、ImXxxによって文字列の変換を要求することもできます。


IMインプット・モデルにおいては、すべてのキー入力は、アプリケーションのスレッド・コンテキストで処理されます。

アプリケーション
アプリケーションのIMサポート・レベルには、3つのレベルがあります。

レベル 1 アプリケーション
このレベルのアプリケーションは、IMの存在も知りませんし、IMモジュールとコミュニケーションを取ることもありません。アプリケーションがシステム・コントロール・ウィンドウ・クラス(例えば、シングル・エディット・フィールドなど)を使用すると、ウィンドウの上でスポット変換をできます。

レベル 2 アプリケーション
このレベルのアプリケーションは、IMシステムのために変換情報を用意します。また、変換ウィンドウの位置やフォントの情報を指定することができます。 アプリケーションは、IMモードのオン/オフのようなIMモードのコントロールを行うことができます。

レベル 3 アプリケーション
このレベルのアプリケーションは、レベル2のアプリケーションのようにIMシステムをコントロールできます。 さらに、このレベルのアプリケーションは、IMシステムからの変換情報を取得することができます。 アプリケーションは、変換文字列を自分のウィンドウに表示することができます。 アプリケーションは、変換した文字列をPMWINのWinGetMsgによらず、IM APIによって取得することができます。 アプリケーションは、ImConvertString APIによるIMEの表示機能を使わずに文字列を変換することもできます。

PMWIN

PMWINは、IMモジュールにキーボード・イベントを渡します。IMモジュールは、PMWINから得たキーボード・イベントによりIMEが変換文字を生成すると、PMWINに対して変換文字を返します。 そして、PMWINは、WinGetMsgにより、キーボード・イベントと変換文字をアプリケーションに返します。

KBD BB

KBD DDは、キーボードのハードウェア・イベントにより、キーボード・イベントを生成します。キーボード・イベントは、PMWINのシステム・キューにキューイングされます。

パート・クラス

IMEメーカーは、独自のユーザー・インタフェースを用意することができます。ImeInitializeによりIMEウィンドウの名前を用意するときに、システム(IMウィンドウ)は、IMEウィンドウのユーザー・インタフェースに関連するメッセージを送ります。 IMEウィンドウは、パート・クラス・ウィンドウにこのメッセージをディスパッチできます。 システムには、デフォルトのパートクラスが用意されています。IMEは、独自のユーザー・インタフェースの必要が無ければ、デフォルトのパート・クラスを使用できます。詳細は、「デフォルトIMクラス」に記述されています。

IME

IMEは、キーボード・イベントから変換文字列を生成します。IMEは、候補文字列を表示する必要があると、アプリケーションがメッセージをインターセプトできるように、IMEウィンドウへのユーザー・インタフェース・メッセージを生成するように要求します。 IMEは、PMのスペックに一致したキー・イベントを得ます。キー・イベントには、IME仮想キーの情報も追加されています。IME仮想キーは、アルファベット・キーを含むすべてのキーに対して定義しています。

IM

IMは、DBCS(ダブルバイト文字セット)の変換サポートのためのPMWINの拡張モジュールです。IMシステムは、PMWINからキーボード・イベントを得ます。IMシステムは、そのキーボード・イベントをカレントのIMEへ渡します。IMは、IMEモジュールをサポートするために、IM APIを用意しています。

IMシステムは、次の図のようになっています。:

$eComStation 2.0 日本語版&シルバーカトラリーのお部屋-IM System

IMモジュールは、分解すると以下のようになります:


  1. IMインタフェース(API)
    IMインタフェースは、外部から呼ばれるAPIを持っています。IMインタフェースは、APIを他のコンポーネントに振り分けます。


  2. メッセージ・マネージャ
    メッセージ・マネージャは、WM_IMECONTROLメッセージをIM APIに変換します。


  3. インスタンス・マネージャ
    IMインスタンスとIMパートインスタンスを管理します。


  4. KBDリソース・マネージャ
    KBDリソース・マネージャは、変換テーブルを管理します。キーボード・イベントのハンドリングとPMWINへの変換テーブル変更の要求をします。


  5. IMEマネージャ
    IMEへのインタフェース部分です。IMEモジュールによってエクスポートされたAPIをコールします。また、インストールされているIMEのリストも管理します。


  6. ディスプレィ・サーバー・マネージャ
    ディスプレィ・サーバー・マネージャは、IMインスタンスごとのディスプレィ・ハンドラーのアドレスを管理します。


  7. IMウィンドウ
    IMウィンドウは、アプリケーションのためのインタフェースウィンドウです。アプリケーションは、IMウィンドウにWM_IMECONTROLメッセージを送ることによって、IMEをコントロールすることができます。IM ウィンドウは、アプリケーションがImIsIMEMessageかWinDefWindowProcをコールすると、IMに関係するメッセージを戻されます。


  8. デフォルト IMクラス
    IMシステムは、以下のIMウィンドウ・クラスを定義しています。

    デフォルトIMEウィンドウ・クラス
    WC_IME_CONVERSION
    WC_IME_STATUS
    WC_IME_CANDIDATE
    WC_IME_INFOMSG
    WC_IME_REGWORD

    IMクラスの機能の詳細は、「32ビットIMEインタフェース」の章に記述されています。


  9. インストール/登録
    IMEの登録を管理します。IMEをOS/2システムで使用するには、IMEをOS/2システムにインストールしておく必要があります。




コントロール・フロー

ウィンドウ生成時のコントロール・フロー

$eComStation 2.0 日本語版&シルバーカトラリーのお部屋-control makes window

  1. WinCreateWindow

  2. ウィンドウ生成を知らせる

  3. インスタンスの生成を要求

  4. IMウィンドウの生成

  5. IMEのロードの要求

  6. カレントIMEの取得

  7. IMEのロード

  8. ディスパッチ・アドレスのセットアップ

  9. モード変更の要求



キーボード・イベントのコントロール・フロー

eComStation 2.0 日本語版&シルバーカトラリーのお部屋-Control KB event

全画面セッションとDOSセッションでのコントロール・フロー

eComStation 2.0 日本語版&シルバーカトラリーのお部屋-Control CMD

メッセージ・フロー

$eComStation 2.0 日本語版&シルバーカトラリーのお部屋-message flow

  1. WM_IMECONTROL

  2. Im Api

  3. ImeNotifyEvent

  4. ImRequestEvent

  5. WM_IMEREQUEST


WIN95では、アプリケーションは、IMウィンドウに対しWM_IME_CONTROL(IMC_OPENSTATUSWINDOW)メッセージを送った際にWM_IME_NOTIFY(IMN_OPENSTATUSWINDOW)メッセージを受け取ることはありません。新しいIMでは、アプリケーションは、IMウィンドウに対しWM_IMECONTROL(IMC_OPENSTATUSWINDOW)メッセージを送ると、WM_IMEREQUEST(IMR_OPENSTATUSWINDOW)メッセージを受け取ります。

メッセージ・フローのサンプル


  1. アプリケーションがIMウィンドウに対しWM_IMECONTROL(IMC_SETCONVERSIONWINDOWPOS)メッセージを送ります。

  2. IMウィンドウは、IMのAPIであるImSetConversionWindowPosをコールします。

  3. IMは、ImeNotifyEvent(IME_NE_INSTANCEUPDATED, IME_NE_IU_CONVERSIONPOS)をコールします。

  4. IMEは、ImRequestEvent(IMR_CONVERSION, IMR_CONV_CONVERSIONPOS)をコールします。

  5. IMは、WM_IMEREQUEST(IMR_CONVERSION, IMR_CONV_CONVERSIONPOS)メッセージを生成してフォーカスを持つアプリケーションのウィンドウに送ります。

  6. アプリケーションは、WM_IMEREQUEST(IMR_CONVERSION, IMR_CONV_CONVERSIONPOS)メッセージを処理しないときには、WinDefWindowProcにそのまま渡します。

  7. WinDefWindowProcは、WM_IMEREQUEST(IMR_CONVERSION, IMR_CONV_CONVERSIONPOS)メッセージをIMウィンドウに送ります。

  8. IMウィンドウは、WM_IMEREQUEST(IMR_CONVERSION, IMR_CONV_CONVERSIONPOS)メッセージをIMEウィンドウに送ります。

  9. IMEウィドウは、WM_IMEREQUEST(IMR_CONVERSION, IMR_CONV_CONVERSIONPOS)を変換ウィンドウに送ります。



ImIsIMEMessage

IMEのことを感知しないアプリケーションは、WinDefWindowProcによって、IMウィンドウにそのまま渡されます。

IMEを利用するアプリケーションは、IMウィンドウにIMメッセージを渡すためにImIsIMEMessageを利用できます。 それによって、アプリケーションは、IMウィンドウによってハンドリングされるメッセージであるかチェックします。

結果部分のハンドリング

レベル1 アプリケーションとレベル2 アプリケーション
eComStation 2.0 日本語版&シルバーカトラリーのお部屋-level 1&2

  1. ImRequestEvent

  2. WM_IMEREQUEST (IMR_??)

  3. WinDefWindowProc

  4. IM Window call IM

  5. WinPourMessage

  6. WinGetMsg


レベル3 アプリケーション
eComStation 2.0 日本語版&シルバーカトラリーのお部屋-level 3

  1. ImRequestEvent

  2. WM_IMEREQUEST (IMR_??)

  3. ImQueryResultString (アプリケーションは、IMインスタンスからの結果文字列を得ます。)



表示サービスのハンドリング

$eComStation 2.0 日本語版&シルバーカトラリーのお部屋-display service manager

インストール[Install]

言語[language]

新しいIMは、言語リストと共にインストールされます。現バージョンでは、以下に示す言語リストのみが使えます。

JA
EN

これは、ジェネラル言語モジュール(ULS)が Merlin の時間構造に影響を与えないのからもわかるように、IMシステム独自の言語システムとしての値です。ジェネラル言語メカニズムが利用できるようになれば、IMシステム独自の言語システムは、ジェネラル言語メカニズムを使うように統合されます。 現バージョンのIMでは、言語とコードページの間に静的なテーブルを持っています。サンプルとしては、

言語 コードページ
JA 932 942 943
EN 437 850

Note: 850が多国語コードページであることから、コードページ850を英語(EN)に割り当てます。 なぜなら、IMの現ユーザーは、DBCS圏の国の人であり、静的な割り当ては、ジェネラル言語メカニズムがOS/2システムに組み込まれる時に取り除かれるからです。

PM セッションインストール

IMの設定オブジェクトは、次のようなパネルを持っています。

eComStation 2.0 日本語版&シルバーカトラリーのお部屋-gui1

IMEのインストール画面は、現在のPMのインストール画面とよく似ています。

eComStation 2.0 日本語版&シルバーカトラリーのお部屋-gui2

デフォルトIMEの設定画面は、言語によるデフォルトIMEの選択を変更するものです。

eComStation 2.0 日本語版&シルバーカトラリーのお部屋-gui3

スイッチキー定義の設定画面は、新しく追加されたものです。

【追記】
eComStation 2.0 日本語版&シルバーカトラリーのお部屋-gui4
eComStation 2.0 日本語版&シルバーカトラリーのお部屋-gui4shosai
ついでに eComStation で「アイコン」ページが拡張されているのでスクリーンショットを紹介しておきます。

全画面(OS/2コマンド・プロンプト全画面)セッションインストール

IMMONは、IMインタフェースのImRegisterIMEによってインストールされる新しいIMEをサポートするために変更されています。そのため、全画面セッションのための追加作業のようなことは必要なくなりました。

新しいIMでは、全画面セッションのインストールは、サポートされません。

ですから、IMEは、全画面セッション用の独自のインタフェースを用意することはできません。

IMシステムは、DOS IMEイベントをIMインタフェースに割り当てるルーティング・メカニズムをサポートしています。

IMEがDOSセッションにおける独自のユーザー・インタフェースをサポートしたい場合には、IMEは、VIMMメカニズムを使ってスタブ・モジュールを追加インストールする必要があります。VIMMメカニズムの詳細については、DOSサポートの項を参照してください。

IMP 考慮点

16ビットのIMEのために、以前のIMPインタフェースは残されています。IMPインタフェースは、IMシステムのIME登録管理に置き換えられます。

16ビットIMEサポート[16bit IME Support]

IMシステムは、以下のようにGTO(Glue of Thunk Operation)と呼ばれるマッピング・レイヤーを用意しています。

$eComStation 2.0 日本語版&シルバーカトラリーのお部屋-16bit IME Support

GTOは、ユーザー・インタフェース・ウィンドウとしてデフォルト・パート・クラスを使用します。

ユーザー・インタフェースの考慮点

16ビットIMEは、いくつかの独自インタフェースのダイアログを持っています。 システムは、16ビットIMEが独自のUIダイアログを表示することを妨げません。



DBCS OS/2 32bit Input Method Part2へつづく:

【11/10 9:00追記】海外からのアクセスを前提にした記事のため、DBCS という単語をタイトルに挿入しました。
【2011.06/04修正】不要なを削除。
AD