独自の X-Designer 再現コマンドの追加

独自の X-Designer 再現コマンドの追加


X-Designer 再現のコマンドセットの使用目的は、ユーザーアクションを再現したり、アプリケーションのウィジェット階層やリソース設定に関するアプリケーションの状態を検査することです。使用できるコマンドセットはこれだけではありません。以下に示すようにこのコマンドセットを拡張して、必要に応じて独自のコマンドを追加することもできます。

1 つのコマンドを含むモジュールを構築する方法について説明します。このコマンドは、標準エラーにメッセージおよび現在のシェルウィジェットの名前を出力します。独自のコマンドを構成する際に、この例をテンプレートとして使用することができます。

コマンドのソースファイルは、Makefile とともに $ XDROOT/src/examples/replay/usertemplate ディレクトリに用意されています。$ XDROOT は、 X-Designer のインストールディレクトリです。

このディレクトリの内容は、以下のとおりです。

サポートファイルは、追加コマンドが X-Designer 再現機構と通信するための枠組みを提供します。変更する必要があるファイルは、xdsResources.h ファイルだけです。「.xds」という接頭辞が付いた残りのファイルは、決して変更しないでください。

interface.c ファイルの内容は、次のとおりです。

#include "stdio.h"
#include "X11/Xos.h"
#include "X11/Xlib.h"
#include "X11/Intrinsic.h"

void
exampleHalloWorld( shell, message)
	Widget shell;
	char * message;
{
	if (!message)
		message = "no message";
	(void) fprintf ( stderr, "Widget %s says '%s'\n",XtName(shell), message);
}

この例にあるように、ユーザー定義関数は必ず以下の 2 つの引数をとります。

メッセージは、スクリプト内の user コマンド構文がある行のコマンドの後に続く文字列すべてです。以下のスクリプトの一部は、コマンドにアクセスし、使用する例を示したものです。

import usertemplate
in ApplicationShell
	user HalloWorld I'm here

この場合、メッセージの文字列は「I'm here」です。

インタフェース

すべてのオブジェクトと X-Designer 再現機構との間のインタフェースは、標準の Xt リソース処理ルーチンを使用して実現されています。


注 - リソースの構造体については、『X Toolkit Intrinsics Programming Manual』(O'Reilly and Associates 刊) 第 4 巻の第 10 章などの文献を参照してください。

以下に示すように、新規コマンドの項目が xdsResources.h のリソース一覧に追加されます。

{
	"HalloWorld", XtCCallback, XtRPointer, sizeof(XtPointer),
	XtOffsetOf(data_t,HalloWorld), XtRImmediate,
	(XtPointer)exampleHalloWorld
}

上記コードで重要な項目は、次の 3 つです。

リソースへのポインタは、このファイル内のデータ構造体に追加されます。

typedef struct {

  int       type;
  XtPointer setValues;
  XtPointer getValues;
  XtPointer engineSetValues;
  XtPointer engineGetValues;
  /*-----------------------*/
  XtPointer HalloWorld;
} data_t;

データ構造体のこの行より上の項目は、 X-Designer 再現オブジェクトすべてに共通です。

このファイルの末尾で、関数の宣言を行います。

extern void exampleHalloWorld();

モジュールの構築

これまでに説明したように、モジュールの構築は、Makefile の OBJECT 行を変更するだけで実行できます。この例では、次のように変更します。

    OBJECT=usertemplate

そして、次のように入力してモジュールを構築します。

    make solaris

最後に、構築した共有オブジェクトを $@ROOTDIR/lib/xds ディレクトリにコピーまたはリンクします。

    cp libusertemplate.so $ XDROOT/lib/xds

これで、すべての準備が完了しました。

まとめ

新規コマンドを X-Designer 再現コマンドセットに追加するには、以下のようにします。

  1. 関連関数を interface.c ファイルに追加します。

  2. 項目を xdsResources.h のリソース一覧に追加します。

  3. xdsResources.h にデータ構造体への関数ポインタを追加します。

  4. xdsResources.h に関数の外部宣言を追加します。

  5. 必要に応じて、メークファイルの OBJECT 行を変更します。

  6. モジュールを構築します。

  7. 構築したモジュールを $ XDROOT/lib/xds ディレクトリにコピーまたはリンクします。

構築するモジュールの数には制限はありません。また、それらのモジュールはいつでもスクリプトに読み込むことができます。

関連項目: