[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ]

# 3 UILへのDECwindows拡張機能

この章では，DECがMotifユーザ・インターフェイス言語(UIL)に追加した拡張機能について説明します。 特に，ネストしたコンパウンド・ストリング，UIL コンパイラの新しいコマンド行修飾子，そしてWMLバイナリ・データベースの使用方法について説明します。

さらに，付録 AではUIL組み込み表を列記しています( このUIL組み込み表にはDECが提供する追加ルーチンが含まれています) 。このUIL組み込み表は，ユーザが自分のUIL仕様がMotifツールキットと矛盾していないかどうかをチェックするために使用することができます。 このチェックはコンパイル中に行われます。

# 3.1 ネストしたコンパウンド・ストリング

ネストしたコンパウンド・ストリングにより，コンパウンド・ストリングを表示する方向に対応づけて， 指定したコンパウンド・ストリングを他のコンパウンド・ ストリング内にネストすることができます。一方のコンパウンド・ ストリング・セグメントを右から左に読み，もう一方のコンパウンド・ ストリングは左から右に読む必要がある場合は，NESTED_COMPOUND_ STRING関数を使用します。

NESTED_COMPOUND_STRING関数の結果は，方向をネストしたコンパウンド・ ストリングです。NESTED_COMPOUND_STRINGは次に示す値の1つを取ります。

- 連結したnested_string_expression

- 方向文字列式

- 文字列式

NESTED_COMPOUND_STRING関数の構文は次のとおりです。

       NESTED_COMPOUND_STRING(nested_string_expression...)

ここでは次のように仮定しています。

         nested_string_expression :==
               {nested_string_expression nested_string_expression ...  【1】
               |RTOL (nested_string_expression)  【2】
               |LTOR (nested_string_expression)  【3】
               |string_expression [SEPARATE=Boolean_expression]};      【4】

1. ネストした文字列式とは，2つ以上のnested_string_ expressionを1つのnested_string_expressionに連結したものである。 各nested_string_expressionは，次に示す文字列式の1つで構成されている。

   - 連結した文字列式

   - 方向文字列式( RTOLまたはLTOLのいずれか)

   - 文字列式

2. RTOLはネストした文字列式を右から左にフォーマットする。

3. LTORはネストした文字列式を左から右にフォーマットする。

4. 文字列式は，選択した文字セット内で許容される文字列とする。 この文字列式はNULLで終了する文字列でなければならない。オプションでSEPARATE 句を含むこともできる。SEPARATE句は，論理式がTRUE の場合にコンパウンド・ストリングの最後にセパレータを付け加える。SEPARATE 句を省略するとセパレータのない文字列ができる。

コンパイラは，文字列式のそれぞれについて上記の4つのタイプのいずれかであるかどうかを調べるために評価を行い， 次にすべての文字列式を， ネストした方向設定で1つのコンパウンド・ストリングに連結します。

ネストしたコンパウンド・ストリングのUILコードの例を次に示します。

              (RTOL ("Hello"
                    LTOR ("123", separate=TRUE)
                    "World"
                    ))

この例のコンパウンド・ストリングは，エンド・ユーザには次のように表示されます。

              123 olleH
                  dlroW

# 3.2 UILコンパイラのコマンド修飾子

UILコンパイラは，省略時の値としてMotifバージョン1.1.1とDXmのウィジェットを使用します。 ただし，別のコンパイラ・コマンド修飾子を使用すれば， これ以外のバージョンやこれ以外のウィジェットを使用することもできます。 これ以降の節では，OpenVMS，UNIXおよびWindows NTオペレーティング・ システム上のUILコンパイラの使用方法について説明します。

## 3.2.1 OpenVMSシステム上のUILコンパイラのコマンド修飾子

OpenVMSシステム上のUILコンパイラのコマンド修飾子を，表 3-1 に示します。

### 表 3-1 OpenVMSコンパイラ・コマンド修飾子

修飾子 | 省略時の値 | 説明
--- | --- | ---
/MOTIF | /XUI /VERSION=V2 | MotifおよびDECが拡張したウィジェット・ データベースを使用する。
/WIDGET_META_ DESCRIPTION=filespec |  | UILソースを処理するときにウィジェット・ メタ記述(WMD)ファイルの使用を選択する。UIL には標準OSF/Motifウィジェット・セット，およびDECが拡張したウィジェット・ セットの2つのWMDファイルが付いている。標準OSF/Motif ウィジェット・セットを使用したい場合には，この修飾子には次のファイル指定を使用する。
       DECW$SYSTEM_DEFAULTS:DECW$UIL_OSF_MOTIF_1_1.WMD
|  | DECが拡張したウィジェット・ セットを使用したい場合には，/MOTIF修飾子を使用するか， またはこの修飾子を次に示すファイル指定に使用する。この2つの方法とも， 生じる結果は同じである。
       DECW$SYSTEM_DEFAULTS:DECW$UIL_DXM_MOTIF.WMD
(システム管理者に，使用可能な追加のWMDファイルがあるかどうかを尋ねてください。) この修飾子は/MOTIF修飾子とのみ一緒に使用し，/XUI修飾子と使用してはならない。 この修飾子の使用方法の詳細については，第3.3節を参照。
/[NO]LIST | 会話型モードの/NOLIST バッチ・モードの/LIST | コンパイラがリスト・ファイルを作成するように指示する。 リスト・ファイルは現在の省略時のディレクトリ内に作成され， 入力ファイルと同じファイル名になるが.LIS というファイル拡張子が付けられる。/LIST修飾子にファイル指定を加えると， コンパイラはその指定を使用してリスト・ファイルの名前を付ける。
/[NO]MACHINE_CODE | /MACHINE_CODE | ほとんどの高級言語コンパイラに指定できる/MACHINE_CODE ( または同値の)修飾子のように機能する。 UILコマンド行で/LISと/MACHINE_CODEの両方を指定すると，コンパイラはUID ファイルに書き込んだレコードの記述をリスト・ファイルに書く。 これは，コンパイラが高級言語から生成した機械語コードをリストに置くのと似た働きである。 このリストの主な目的はUILコンパイラ内のエラーを隔離することにある。
/[NO]OUTPUT | /OUTPUT | コンパイラがユーザ・ インターフェイス定義(UID)ファイルを作成するよう指示する。省略時の設定では，/OUTPUT は現在の省略時のディレクトリに入力ファイルと同じ名前でUID という拡張子を持つUIDファイルを作成する。/OUTPUT修飾子にファイル名を指定すると， コンパイラはその指定を使用してUIDファイルの名前を付ける。 /NOOUTPUT修飾子を使用している場合，またはコンパイラがエラーまたは重大エラーのカテゴリに入る診断メッセージを発行した場合には， UIDファイルは作成されない。UILモジュールが構文的に正しいかどうかだけをチェックしたい場合には，/NOOUTPUT 修飾子を使用することができる。
/[NO]WARNINGS | /WARNINGS | UILコンパイラが警告メッセージまたは情報メッセージ， あるいはその両方を出力しないように指示する。

## 3.2.2 UNIXおよびWindows NTシステム上のUILコンパイラのコマンド修飾子

UNIXおよびWindows NTオペレーティング・システムでは，次に示すOSF /Motif UILコンパイラから選択することができます。

       uil [修飾子]ファイル名

これらのコンパイラのコマンド修飾子を，表 3-2 に示します。

### 表 3-2 UNIXおよびWindows NTシステム上のMotif UIL コンパイラ・コマンド修飾子

修飾子 | 省略時の値 | 説明
--- | --- | ---
-s |  | ローカライズされたコンパウンド・ ストリングを生成するとき，現在のロケールを使用するようにコンパイラに指示する。
-wmdfilename |  | UILソースを処理するときに使用するウィジェット・ メタ記述(WMD)ファイルを選択する。2つのWMD ファイル，すなわち標準OSF/Motifウィジェット・セットおよびDEC が拡張したウィジェット・セットが提供されている。標準OSF/Motifウィジェット・ セットを使用したい場合には，次のファイルを-wmdフラグに指定する。 このファイルの位置は使用しているオペレーティング・システムによって異なる。
       motif.wmd
|  | DECが拡張したウィジェット・ セットを使用したい場合には，次に示すファイル名を-wmd 修飾子とともに使用することができる。このファイルの位置は使用しているオペレーティング・ システムによって異なる。
       dxm-motif.wmd
(システム管理者に，使用可能な追加のWMDファイルがあるかどうかを確認してください) 。
- ofilename | a.uid | コンパイラがユーザ・ インターフェイス定義(UID)ファイルを作成するように指示する。 省略時の設定では，UILはa.uidという名前のUIDファイルを作成する。 コンパイラがエラーまたは重大エラーのカテゴリに入る診断メッセージを発行した場合には，UID ファイルは作成されない。
-vfilename | リストは作成されない | コンパイラがリスト・ファイルを作成するように指示する。-v オプションが付いていない場合には，コンパイラはリストを作成しない。
-m | 機械コードは作成されない | コンパイラがUIDファイルに追加したレコードの記述をリスト・ ファイルに置くように指示する。これはエラーの隔離に役立つ。
-w | 警告メッセージが生成される | コンパイラにすべての警告メッセージおよび情報メッセージを出力しないように指示する。 エラー・メッセージおよび重大エラー・ メッセージが生成される。
-I[pathname] | /usr/include | -Iオプションの後に絶対ディレクトリ指定を指定すると，コンパイラはスラッシュ(/) で始まらない名前のインクルード・ファイルを次の順序で検索する。 メイン・ファイルのディレクトリ・パス内 -Iオプションで指定したディレクトリ内 標準ディレクトリ(/usr/include)内 -Iのみを指定すると，コンパイラはメイン・ファイルのあるディレクトリのみを検索し， 標準ディレクトリ(/usr/include)内のインクルード・ファイルは検索しない。

# 3.3 WMLバイナリ・データベース

MotifのDEC提供のバージョンでは，ウィジェット・メタ記述(WMD)と呼ばれるバイナリ・ フォームのウィジェット・メタ言語をサポートしています。WML は，UILコンパイラとともに使用するウィジェットやその他の属性を説明するWMD ファイルを生成します。DECは，各オペレーティング・システム上に2 つのWMLソース・ファイルを提供しています。ユーザはこれらのファイルを自分のサブディレクトリに複写して修正することができるため， ユーザ定義をしなくても独自のウィジェットを名前だけで参照することができます。

これ以降の節では，OpenVMS，UNIXおよびWIndows NTの各オペレーティング・ システムに提供されるウィジェット・メタ記述(WMD)サポートについて説明します。 ウィジェット・メタ記述(WMD)の詳細については，『OSF/Motifプログラマーズ・ ガイド』を参照してください。

## 3.3.1 OpenVMSシステム上のWMLファイル

DECはOpenVMSオペレーティング・システムでWMLデータベースをサポートするために， 次のファイルを提供しています。

- DECW$UIL_OSF_MOTIF_1_1.WMLは，OSFから提供されるMotifツールキットを指定する。

- DECW$UIL_DXM_MOTIF.WMLは，DECが追加した拡張機能付きのOSF/Motif ツールキットを記述する。

新しいウィジェットを追加する場合やウィジェット特性を変更する場合には，2 つあるWMLファイルの1つを複写することから開始します。DECのウィジェットを使用している場合には，DECW$DXM_MOTIF.WML を使用します。アプリケーションがOSF ウィジェット・セットのみを必要としている場合には，OSF WML ファイルを使用します。

さらに，DECでは次のファイルを提供しています(これらのファイルは上記の2 つのWMLファイルに対応するものです)。

- DECW$UIL_OSF_MOTIF_1_1.WMDは，OSFから提供されるMotifツールキットを指定する。

- DECW$UIL_DXM_MOTIF.WMDは，DECが追加した拡張機能付きのOSF/Motif ツールキットを記述する。

## 3.3.2 OpenVMSシステム上の追加ウィジェットのサポート

追加ウィジェットのためのUILサポートを追加できるようにするために， DECは次のファイルを提供しています。

- テンプレート
  DECW$SYSTEM_DEFAULTS:DECW$UIL_OSF_MOTIF_1_1.WML
  DECW$SYSTEM_DEFAULTS:DECW$UIL_DXM_MOTIF.WML

  上記のファイルのいずれかを，自分のWMLファイルのテンプレートとして使用する。

- DECW$EXAMPLES:UILWMDCREATE.C

- DECW$EXAMPLES:UILWMDCREATE.COM

処理方法は次のとおりです。

1. 新しいウィジェット用のサポートを追加するには，DECW$UIL_ DXM_MOTIF.WMLファイルを拡張する。

2. DECW$EXAMPLES:UILWMDCREATE.Cを自分のディレクトリに複写する。

3. 自分のウィジェットの公用インクルード・ファイルをUILWMDCREATE.C に追加する。Cファイルには，ユーザが公用インクルード・ ファイルを追加した場所を示すコメント欄がある。

4. 次のコマンド・フォーマットを入力して，UILWMDCREATE.COMを実行する。

             @DECW$EXAMPLES:UILWMDCREATE filename.WML

   このコマンド・プロシージャには次の3つの主要機能がある。

   1. WMLを実行して.hファイルを作成する。

   2. 修正したUILWMDCREATE.Cをコンパイルし，リンクし，実行する。

   3. クリーン・アップする(コマンド・プロシージャが正常終了しなかった場合には， 生成された余分なファイルはクリーン・アップされない。 コマンド・プロシージャの再実行を試みる前に，コマンド・ プロシージャが作成した新しいファイルおよびサブディレクトリをすべて削除する必要がある) 。

   このコマンド・プロシージャを実行すると，UILコンパイラが内部データベースの代わりに使用するWMD ファイルが作成される。

   その他に2つのファイル，すなわちMMファイルとSDMLファイルが作成される。 これらのファイルは文書整形ファイルである。MMファイルはtroff MM マクロ・フォーマット・ファイルであり，SDMLファイルはVAX Document ファイルである。MMファイルはULTRIXシステム上で， またSDMLファイルはOpenVMSシステム上で使用して，ユーザ独自のウィジェット・ セットの組み込み表を作成することができる。

5. ドル記号($)プロンプトに対して次のフォーマットのコマンドを入力して，UIL コンパイラを起動する。

             UIL/MOTIF/WIDGET_META_LANGUAGE=filename.WMD filename.UIL

## 3.3.3 UNIXおよびWindows NTシステム上の WMLファイル

DECはUNIXおよびWindows NTオペレーティング・システムでWMLデータベースをサポートするために， 次のファイルを提供しています。

- motif.wmlは，OSFから提供されたMotifツールキット用です。

- dxm-motif.wmlは，DECが追加した拡張機能付きのOSF/Motifツールキット用です。

新しいウィジェットを追加する場合やウィジェット特性を変更する場合には，2 つあるWMLファイルの1つを複写することから開始します。DECのウィジェットを使用している場合には，dxm-motif.wml を使用します。アプリケーションがOSF/Motif ウィジェット・セットのみを必要としている場合には，motif.wml ファイルを使用します。

さらに，DECでは次のファイルを提供しています(これらのファイルは2つのWML ファイルに対応するものです)。

- motif.wmdは，OSFから提供されたMotifツールキット用です。

- dxm-motif.wmdは，DECが追加した拡張機能付きのOSF/Motifツールキット用です。

## 3.3.4 UNIXおよびWIndows NTシステム上の追加ウィジェットのサポート

追加ウィジェットのためのUILサポートを追加できるようにするためにDEC はUNIXおよびWindows NTシステム用に次のファイルを提供しています。

- テンプレート(/user/examples/motif/wml内にある。)
  motif.wml
  dxm-motif.wml

  上記のファイルのいずれかを，自分のWMLファイルのテンプレートとして使用する。

- wmldbcreate.c

- スクリプト・ファイル

処理方法は次のとおりです。

1. wmlファイルを自分のディレクトリにコピーする。

2. 新しいウィジェットのためにサポートを追加するにはwmlファイルを拡張する。

3. ウィジェットの公用インクルード・ファイルをwmldbcreate.c ファイルに追加する。

4. 次のフォーマットのコマンドを入力して，スクリプト・ファイルを実行する。

             uilwmdcreate filename

   make allコマンドを実行してmakefileを作成する。このmakefileには次の3 つの主要機能がある。

   1. wmlを実行して.hファイルを作成する。

   2. 修正したwmldbcreate.cをコンパイルし，リンクし，実行する。

   3. クリーン・アップする(コマンド・プロシージャが正常終了しなかった場合には， 生成された余分なファイルはクリーン・アップされない。 コマンド・プロシージャを再実行する前に，余分なファイルをすべて削除する必要がある) 。

   このスクリプト・ファイルを実行すると，UILコンパイラが内部データベースの代わりに使用するwmd ファイルが作成される。

   その他にMMファイルが作成される。MMファイルはtroff MMマクロ・フォーマット・ ファイルである。MMファイルをUNIXシステム上で使用して， ユーザ独自のウィジェット・セットの組み込み表の複写を作成することができる。

5. 次のフォーマットのコマンドを入力することにより，UILコンパイラを起動する。

             uil -d filenamenew.wmd filename.uil -o filename.uid

[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ]