共通デスクトップ環境 Dtksh ユーザーズ・ガイド

デスクトップ Korn シェルを使用して Motif アプリケーションを作成する

この節では、dtksh を使用して Motif アプリケーションを作成する方法について説明します。dtksh を使いこなすには、Xlib、Xt イントリンシクス、Motif のウィジェット、および Korn シェル・プログラミングに対する経験が必要です。また、C プログラミング言語の知識も役に立ちます。これらのどれにもなじみがない場合は、必要と思われる適切なマニュアルを参照してください。これらのシステムに精通している場合でも、適切なマニュアル・ページにアクセスして、関連内容を参照してください。

システムには、次のライブラリがあります。

リソース

リソースはウィジェットの変数のことで、サイズ、位置、またはカラーといった属性の定義に使用します。各ウィジェットが持つリソースは通常、自身のリソースと、より高いレベルのウィジェットから引き継ぐリソースとが組み合わさったものです。Xt イントリンシクスおよび Motif のリソース名は接頭辞 (XtN または XmN) を持ち、その後にベース名が続きます。ベース名の最初の文字は常に小文字で、その後のベース名内の単語の最初の文字は常に大文字です。dtksh スクリプトでは、接頭辞を削除して、残ったベース名がリソース名になります。したがって、リソース XmNtopShadowColortopShadowColor になります。

Xt および Motif のコマンドの中には、シェル・スクリプトがリソースと、リソース値のペアを表すパラメータの変数を渡せるものがあります。これは、引き数が関連する Xt または Motif の C 関数に渡されるのと似ています。この例としては、ウィジェットの作成に使用するコマンドと XtSetValues コマンドがあります。dtksh において、リソースは、次の構文で指定されます。

resource:value

この resource はリソース名で、value はリソースに割り当てられる値です。dtksh は、自動的に value 文字列を適切な内部表現に変換します。たとえば、次のとおりです。

XtSetValues $WIDGET height:100 width:200 resizePolicy:RESIZE_ANY
XmCreateLabel LABEL $PARENT myLabel labelString:"Close Dialog"

XtGetValues を使用してウィジェット・リソース値を読み取る場合、戻り値は環境変数に設定されます。したがって、Xt イントリンシクスとは異なり、dtksh 版の XtGetValues は、名前:値ペアの形式ではなく、名前:(環境)変数ペアの形式を使用します。たとえば、次のとおりです。

XtGetValues $WIDGET height:HEIGHT resizePolicy:POLICY             
            sensitive:SENSITIVE
echo $HEIGHT
echo $POLICY
echo $SENSITIVE

上記の dtksh セグメントは、次の出力を行います。

100  
RESIZE ANY 
TRUE

ある種のリソース値 (文字列テーブルやビット・マスクなどを含む) は、特殊な表現になります。たとえば、リスト・ウィジェットでは、文字列テーブルに itemsselectedItems の両方のリソースの指定が可能です。dtksh では、文字列テーブルは、カンマで区切られた文字列リストで表現され、これは Motif の場合と似ています。文字列テーブルを返すリソースが XtGetValues による問い合わせを受けた場合、その結果としての値は、カンマで区切られた文字列セットになります。

ビット・マスク値が渡されるリソースは、そのマスクが、| (バー) で区切られたさまざまなマスク値から成る文字列として指定されていることを要求します。ビット・マスクを返すリソースが問い合わせを受けた場合、戻り値は、ビットを表す文字列 (カンマで区切られている) になります。たとえば、次のコマンドを使用して、VendorShell ウィジェット・クラスの mwmFunctions リソースを設定できます。

XtSetValues mwmFunctions: MWM_FUNC_ALL|MWM_FUNC_RESIZE

サポートしていないリソース

dtksh は、Motif リソースのほとんどをサポートしています。次のリストは、サポートしていないリソースのリストです。* (アスタリスク) の付いているリソースは、ウィジェット作成時に XtSetValues を使用して指定できるが、XtGetValues を使用しての取得はできません。

dtksh app-defaults ファイル

Dtksh という名前の dtksh app-defaults ファイルは、次のパスで示した場所にあります。

/usr/dt/app-defaults/<LANG>

この app-defaults ファイルに納められている唯一の情報は、標準 Dt ベースの app-defaults ファイルに納められているものです。dtksh app-defaults ファイルの中身は、次のとおりです。

#include "Dt"

Dt ファイルもまた、/usr/dt/app-defaults/<LANG> にあり、次のとおりです。

*foregroundThreshold: 70   

!###  
!#  
!#   Help system specific resources  
!#  
!###   

!#  
!#  Display Area Colors  
!#  
!#     These resources set the colors for the display area(where  
!#     actual help text is displayed).  The resources are complex  
!#     because they have to override the standard color resources  
!#     in all cases.  
!#  
*XmDialogShell.DtHelpDialog*DisplayArea.background: White 
*XmDialogShell*XmDialogShell.DtHelpDialog*DisplayArea.background: White 
*XmDialogShell.DtHelpDialog*DisplayArea.foreground: Black 
*XmDialogShell*XmDialogShell.DtHelpDialog*DisplayArea.foreground: Black   

!# 
!#  Menu Accelerators  
!#  
!#     The following resources establish keyboard accelerators  
!#     for the most frequently accessed menu commands.  
!#  

*DtHelpDialogWidget*searchMenu.keyword.acceleratorText: Ctrl+I 
*DtHelpDialogWidget*searchMenu.keyword.accelerator:  Ctrl<Key>i 
*DtHelpDialogWidget*navigateMenu.backTrack.acceleratorText: Ctrl+B 
*DtHelpDialogWidget*navigateMenu.backTrack.accelerator:  Ctrl<Key>b 
*DtHelpDialogWidget*navigateMenu.homeTopic.acceleratorText: Ctrl+H 
*DtHelpDialogWidget*navigateMenu.homeTopic.accelerator:  Ctrl<Key>h 
*DtHelpDialogWidget*fileMenu.close.acceleratorText:      Alt+F4 
*DtHelpDialogWidget*fileMenu.close.accelerator: Alt<Key>f4

変数の値

この節では、dtksh app-defaults ファイル内のいくつかの変数の値の型について説明します。

定義値

X、Xt、および Motif のインタフェースの C バインディングにおいて、文字列でない値 (ヘッダ・ファイルで定義されている) が多く見られます。このような値の一般的な形式は、Xt または Xm の接頭辞の後に説明的な名前が続く形式になっています。たとえば、フォーム・ウィジェットの子の制約値の 1 つとして、XmATTACH_FORM があります。dtksh では、接頭辞を取り去ったものが同等の値になり、Motif のデフォルト・ファイルで指定する値と全く同じです。

ブール値

dtksh コマンドへのパラメータとして、True または False の語 (大文字小文字は関係ありません) を使用してブール値を指定できます。結果としてのブール値は、true または false のいずれか (すべて小文字を使用) が返されます。

戻り値

dtksh のグラフィカル・コマンドは、対応する C 関数の定義に基づいて、次の 4 つのカテゴリに分類されます。

  1. 関数は Void で、値を返しません。例: XtMapWidget()

  2. 関数は Void ですが、関連するパラメータを介して 1 つ以上の値を返します。

    例: XmGetColors()

  3. 関数は、非ブール値を返します。例: XtCreateManagedWidget()

  4. 関数は、ブール値を返します。例: XtIsSensitive()

カテゴリ 1

dtksh のカテゴリ 1 のコマンドは、対応する C 関数の呼び出しシーケンスに従います。パラメータの数や順序に関しては、関数の標準マニュアルを参照してください。

例:

XtMapWidget $FORM

カテゴリ 2

dtksh のカテゴリ 2 のコマンドも、一般的に対応する C 関数の呼び出しシーケンスに従います。変数へのポインタを渡す代わりに、環境変数の値を返します。

例:

XmGetColors $FORM $BG FOREGROUND TOPSHADOW BOTTOMSHADOW SELECT  
echo "Foreground color = " $FOREGROUND

カテゴリ 3

dtksh のカテゴリ 3 のコマンドは、対応する C 関数とは多少異なります。C 関数がその値をプロシージャ・コールの値として返すのに対して、dtksh コマンドは追加のパラメータを要求します。このパラメータは、戻り値として置かれている環境変数の名前で、常に最初のパラメータになります。

例:

XmTextGetString TEXT_VALUE $TEXT_WIDGET  
echo "The value of the text field is "$TEXT_VALUE

カテゴリ 4

dtksh のカテゴリ 4 のコマンドは、C の場合と全く同様の条件付き式で使用できる値を返します。C 関数がリファレンス変数 (カテゴリ 2 と同じ) を介して値を返すと、dtksh コマンドもまた、対応するパラメータの変数名を使用します。

例:

if XmIsTraversable $PUSH_BUTTON; then  
echo "The pushbutton is traversable"  
else 
echo "The pushbutton is not traversable"  
fi

一般に、コマンドに渡されるパラメータの順序と型は、対応する C 関数に渡されるものと一致します。ただし、カテゴリ 3 のコマンドのところで記述したものは例外です。

即時戻り値

カテゴリ 3 のコマンドの多くは、コマンドへの最初のパラメータとして指定する環境変数を使用して 1 つの値を返します (これらの特殊なコマンドに対する最初のパラメータは、variable という名前です)。この戻り値がすぐに式で使用されると、変数名の代わりに、特殊環境変数 "-" が使用される場合があります。dtksh が、戻り値が返される環境変数の名前として "-" を認識すると、代わりにコマンドの値としてその結果を返します。これによりシェル・スクリプトは、そのコマンド呼び出しを別のコマンド呼び出しに埋め込むことができます。この機能は、単一の値を返すコマンドにだけ働き、その値は最初のパラメータに返されます。たとえば、次のとおりです。

XtDisplay DISPLAY $FORM 
XSync $DISPLAY true

上記は、次のように置換できます。

XSync $(XtDisplay "-" $FORM) true

$DISPLAY のリファレンスは、XtDisplay の呼び出しが返す値で置換されます。

これは、次の例外を除くすべてのカテゴリ 3 のコマンドに有効です。例外となるのは、ウィジェットを作成するコマンド、複数の値を返すコマンド、および最初のパラメータが名前の付いていない変数であるコマンドです。"-" を環境変数名として受け入れないコマンドには、次のようなものがあります。