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 リソース処理ルーチンを使用して実現されています。
以下に示すように、新規コマンドの項目が xdsResources.h のリソース一覧に追加されます。
{ "HalloWorld", XtCCallback, XtRPointer, sizeof(XtPointer), XtOffsetOf(data_t,HalloWorld), XtRImmediate, (XtPointer)exampleHalloWorld}
上記コードで重要な項目は、次の 3 つです。
"HalloWorld"
はリソース名である
XtOffsetOf(data_t, HalloWorld)
はデータ構造体における関連項目からのオフセットである
(XtPointer)exampleHalloWorld
は関数のアドレスへのポインタである
リソースへのポインタは、このファイル内のデータ構造体に追加されます。
typedef struct { int type; XtPointer setValues; XtPointer getValues; XtPointer engineSetValues; XtPointer engineGetValues; /*-----------------------*/ XtPointer HalloWorld;
データ構造体のこの行より上の項目は、 X-Designer 再現オブジェクトすべてに共通です。
このファイルの末尾で、関数の宣言を行います。
extern void exampleHalloWorld();
これまでに説明したように、モジュールの構築は、Makefile の OBJECT 行を変更するだけで実行できます。この例では、次のように変更します。
OBJECT=usertemplate
そして、次のように入力してモジュールを構築します。
make solaris
最後に、構築した共有オブジェクトを $@ROOTDIR/lib/xds ディレクトリにコピーまたはリンクします。
cp libusertemplate.so $ XDROOT/lib/xds
これで、すべての準備が完了しました。
新規コマンドを X-Designer 再現コマンドセットに追加するには、以下のようにします。
構築するモジュールの数には制限はありません。また、それらのモジュールはいつでもスクリプトに読み込むことができます。
関連項目: