# スクリプト例スクリプトスクリプト例スクリプト例

この章は、1章で学んだ`dtksh`の使用方法を説明します。 ここに記述されている2つの簡単なスクリプトは、独自のスクリプトを記述しはじめる際に、 よい参考になります。

## スクリプトの記述

このスクリプトは、プッシュ・ボタン・ウィジェットを置いたブリテン・ボード・ウィジェット を作成しています。スクリプトは、コールバックを含まない簡単なものです。2つめの スクリプトにはコールバックが含まれています。

1つめのスクリプトは次のとおりです。

    #!/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 $TOPLEVELXtMainLoop

図2-1に1つめのスクリプトが生成するウィンドウを示します。

### dttestスクリプトのウィンドウ

スクリプトの1行めは次のとおりです。

    #!/usr/dt/bin/dtksh

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

次の行はXtイントリンシクスを初期化しています。

XtInitialize TOPLEVEL dttest1 Dtksh $0

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

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

    XtSetValues $TOPLEVEL title:”dttest1”

リソース名(タイトル)の終りにあるコロンとその値の間にスペースは入りません。 スペースが入っていると、エラー・メッセージが表示されます。

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

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

ブリテン・ボード・ウィジェットのIDは環境変数`$BBOARD`に保存されます。 ウィジェットの名前は`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`を呼び出すことによって、終了します。