ワイヤレス・コマンダーとは、赤外線の送受信機能を持つ FM TOWNS の 周辺機器です。リモコン信号の送受信する子が可能です。
TownsOS では、ザウルスとの連係を行なうソフトもあります。 |
ここでは、具体的なアプリケーションを意識するのでなく、 ビデオデッキ,カセットデッキ,CDプレーヤやLDプレーヤ を意識したものを目指してみたいと思います。 |
各ボタンの機能は、説明するまでもなく直観的に伝わると思いますので、
省略します。
このような外観にするには、どんな部品を使い、どのように配置するかを 決めなくてはなりません。これには、ボタンを横一列に配置しているアプリ ケーションが、どのような部品で構成されているかを調べると良いでしょう。
具体的には、"xedit"の一番上の列がこのような配置になっている。 なお、アプリケーションがどのような部品から構成されているかは、 "editres"を使用すると良いでしょう。
editres を起動して、"commands"メニューから"Get Tree"を選択し て起動しているXアプリケーションを選択すると、そのアプリケーション
が(X Toolkitで出来ているか、禁止されてない場合には、)どのような 部品から構成されているかが、ツリー構造で表示されます。
ちなみに、xwireless を部品に"ばらす"と、以下のようになります。
/*********************************** * C言語標準インクルードファイル ***********************************/ #include <stdio.h> #include <stdlib.h> #include <errno.h> /*************************************** * X Toolkit 標準インクルードファイル ***************************************/ #include <X11/Intrinsic.h> /* Intrinsics Definitions */ #include <X11/StringDefs.h> /* Standard Name-String definitions */ /***************************************** * Athena Widget のインクルードファイル *****************************************/ #include <X11/Xaw/Command.h> #include <X11/Xaw/Label.h> #include <X11/Xaw/Toggle.h> #include <X11/Xaw/Repeater.h> #include <X11/Xaw/Paned.h>
このことでウィジェットの操作方法を統一し、操作していい部分かよくな い部分かがが明確化し、バグを減らすことにもつながります。
Cは、オブジェクト指向に考えて作られた言語ではないので、カプセル化 という概念を実現するための方法を特に用意されていません。
それゆえ、
『公開される部分』(=パブリック・ヘッダーファイル) |
---|
『非公開の部分』(=プライベイト・ヘッダーファイル) |
---|
というわけで、通常使用するのは、パブリック・ヘッダーファイルとなり ます。『非公開の部分』となるプライベイト・ヘッダーファイルは、ウィジ ェットの内部処理用なので、そのウィジェットのソースコードと子孫のウィ ジェットのソースコードでのみの使用になります。
なお、プライベイト・ヘッダーファイルは、ファイル名の末尾に"P"が ついているファイルのことで、"IntrinsicP.h, LabelP.h, CommandP.h" などです。
int main(int argc, char **argv) { XtAppContext app_context; Widget topLevel; Widget panel, quit, eject, rec, rew, play, ff, stop, pause; topLevel = XtVaAppInitialize( &app_context, /* Application context */ "XWireless", /* Application class */ NULL, 0, /* command line */ &argc, argv, /* command line args */ NULL, /* for missing app-defaults file */ NULL); /* terminate varargs list */ panel = XtVaCreateManagedWidget( "panel", /* arbitrary widget name */ panedWidgetClass, /* widget class from Form.h */ topLevel, /* parent widget */ NULL); /* tarminate varargs list */ quit = XtVaCreateManagedWidget( "quit", /* widget name */ commandWidgetClass, /* widget class from Toggle.h */ panel, /* parent widget */ NULL); /* tarminate varargs list */ ・ ・ ・ pause = XtVaCreateManagedWidget( "pause", /* arbitrary widget name */ toggleWidgetClass, /* widget class from Toggle.h */ panel, /* parent widget */ NULL); /* tarminate varargs list */ XawToggleChangeRadioGroup(rec, play); XtAddCallback(quit, XtNcallback, quit_proc, NULL); XtRealizeWidget(topLevel); XtAppMainLoop(app_context); return(0); }
この部分では、以下の変数が定義されています。
XtAppContext 型変数は、1つのアプリケーションに1つ必要です。 Widget 型変数は、1つのウィジェットにつき1つ必要。
XtAppContext app_context;
Widget topLevel;
Widget panel, quit, eject, rec, rew, play, ff, stop, pause;
このプログラムの中には、以下の関数が使われています。
"Xt" から始まる関数は、英文のオンライン・マニュアルがあると思います。 興味があるかたは、ご覧下さい。
なお、『Xツールキット・イントリンシクス・リファレンス・マニアル』という 本がソフトバンクからでています。この本には、これらの関数の説明が詳しく出 ています。
xmkmf は、imake というツールと Imakefile と言うファイルから、X用の Makefile を作成します。(Imakefile については、後述します。)
今回の場合は、別にインストールまでする必要は無いので、以下のよう な手順でコンパイルする。
$ xmkmf
$ make
$ xwireless &