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

第 2 章 サンプル・スクリプト

この章では、第 1 章「デスクトップ Korn シェルの紹介」で学んだ dtksh の使用方法を説明します。ここで説明する 2 つの簡単なスクリプトは、独自のスクリプトを記述する際に参考にしてください。

スクリプトの記述

このスクリプトは、内部にプッシュ・ボタン・ウィジェットを持つブリテン・ボード・ウィジェットを作成します。コールバックが 1 つもない単純なスクリプトです。2 番目のスクリプトはコールバックを取り込んでいます。

最初のスクリプトは、次のとおりです。

#!/usr/dt/bin/dtksh 
XtInitialize TOPLEVEL dttest1 Dtksh $0
XtSetValues $TOPLEVEL title:"dttest1"
XtCreateManagedWidget BBOARD bboard XmBulletinBoard $TOPLEVEL ¥
    resizePolicy:RESIZE_NONE height:150 width:250 ¥
    background:SkyBlue
XtCreateManagedWidget BUTTON pushbutton XmPushButton $BBOARD ¥
    background:goldenrod ¥
    foreground:MidnightBlue ¥    
    labelString:"Push Here" ¥
    height:30 width:100 x:75 y:60 shadowThickness:3
XtRealizeWidget $TOPLEVEL 
XtMainLoop

最初のスクリプトによって作成されるウィンドウを図 2-1 に示します。

図 2-1 スクリプト dttest のウィンドウ

Graphic

スクリプトの最初の行は次のとおりです。

#!/usr/dt/bin/dtksh

この行は、標準シェルではなく /usr/dt/bin/dtksh を使用してスクリプトを実行することをオペレーティング・システムに指示しています。

次の行で、Xt イントリンシクスを初期化します。

XtInitialize TOPLEVEL dttest1 Dtksh $0

環境変数 $TOPLEVEL にトップレベルのウィジェット名が保存され、dttest1 はシェル・ウィジェット名、Dtksh はアプリケーション・クラス名で、dtksh 変数 $0 によってアプリケーション名が指定されることを表しています。

次の行で、タイトル・リソースにスクリプト名を設定します。

XtSetValues $TOPLEVEL title:"dttest1"

リソース名 (title) の後のコロンとリソース値の間にはスペースは入れられないので注意してください。スペースを入れると、エラー・メッセージが表示されます。

次の 4 行で、ブリテン・ボード・ウィジェットを作成し、いくつかのリソースを設定します。

XtCreateManagedWidget BBOARD bboard XmBbulletinBoard $TOPLEVEL ¥
    resizePolicy:RESIZE_NONE ¥    
    background:SkyBlue¥
    height:150 width:250

環境変数 $BBOARD にブリテン・ボード・ウィジェットの ID が保存されます。bboard はウィジェット名です。この名前は、Xt イントリンシクスが、外部のリソース・ファイルでリソース値を設定するのに使用します。ウィジェット・クラスは XmBulletinBoard です。ブリテン・ボードの親ウィジェットは、環境変数 $TOPLEVEL に格納されているウィジェット ID です。

これは、一番最初の初期化コマンドで作成したトップレベルのウィジェットです。行の終わりの ¥ (バックスラッシュ) は、そのコマンドが次の行へも続いていることを dtksh に指示しています。

次の 6 行で、プッシュ・ボタン・ウィジェットをブリテン・ボードの子として作成し、いくつかのプッシュ・ボタンのリソースを設定します。

XtCreateManagedWidget BUTTON pushbutton XmPushButton $BBOARD ¥
    background:goldenrod ¥
    foreground:MidnightBlue ¥
    labelString:"Push Here"¥    
    height:30 width:100 x:75 y:60¥
    shadowThickness:3

これは、変数、名前、クラス、および親が異なるという点を除いて、ブリテン・ボードを作成するのに使用するプロシージャと基本的に同じです。

次の行で、トップレベル・ウィジェットとそのすべての子を認識します。

XtRealizeWidget $TOPLEVEL

最後に、XtMainLoop コマンドがウィジェットのイベントのループ処理を開始します。

XtMainLoop

このスクリプトを実行すると、ディスプレイ上にウィンドウが表示されます。スクリプトを終了するまで表示されたままの状態です。終了する方法は、[ウィンドウ・マネージャ]メニューで [閉じる] を選択するか、スクリプトを実行した端末エミュレータ・ウィンドウ内で [CTRL] + [C] キーを押すかのどちらかです。

コールバックの追加

ボタンが押されると端末エミュレータにメッセージが表示され、スクリプトが終了するというプッシュ・ボタン関数を作成するには、コールバックを追加します。また、このコールバックの存在をプッシュ・ボタンに伝える必要もあります。新規コードが追加されたスクリプトは、次のとおりです。

#!/usr/dt/bin/dtksh  

activateCB() {
    echo "Pushbutton activated; normal termination."
    exit 0
}

XtInitialize TOPLEVEL dttest2 Dtksh $0
XtSetValues $TOPLEVEL title:"dttest2"
XtCreateManagedWidget BBOARD bboard XmBulletinBoard $TOPLEVEL ¥
    resizePolicy:RESIZE_NONE ¥    
    background:SkyBlue ¥
    height:150 width:250
XtCreateManagedWidget BUTTON pushbutton XmPushButton $BBOARD ¥
    background:goldenrod ¥    
    foreground:MidnightBlue ¥
    labelString:"Push Here"¥    
    height:30 width:100 x:75 y:60 shadowThickness:3

XtAddCallback $BUTTON activateCallback activateCB
XtRealizeWidget $TOPLEVEL 
XtMainLoop

関数 activateCB() がコールバックです。通常は、次のようにプッシュ・ボタンが作成された後に、コールバックをプッシュ・ボタンに追加します。

XtAddCallback $BUTTON
activateCallback activateCB

これで、コールバックはプッシュ・ボタンに認識されました。プッシュ・ボタンをクリックすると、関数 activateCB() は実行され、スクリプトを実行した端末エミュレータにメッセージ「Pushbutton activated; normal termination.」が表示されます。スクリプトは、関数 exit 0 を呼び出して終了します。