アテナはX標準のツールキットで正しくはAthena Widget Setといいます。 素朴な画面ですが、GUIとしての基本的な機能は押さえられていて UNIXにおいて古くから利用できるライブラリの一つです。
最近のウィンドウ・システムに慣れた人には物足らないところもあるでしょうけれど UNIXでGUIアプリケーションを作るときにはお手軽に利用できるので 覚えておいてもよいかと思います。
最近のUNIXシステムも環境が整ってきていて C++も気軽に利用できるようになってきたので ここではC++を使ってアテナのアプリケーションの作り方を紹介していきます。
この資料で紹介している内容は、次のプラットフォームで動作確認をしています。
特殊な書き方は余りしていないので、 これ以外の環境でも少し修正すれば動作するものと思われます。
アテナの開発を行うには、関連ライブラリをパッケージで導入する必要があります。 yumを使って次のパッケージを導入してください。
例えば特権ユーザで次のようにタイプします。
# yum install -y gcc-c++ libXaw-devel
yumを使えば、自動的に他の依存ライブラリも導入してくれて便利です。
libXaw-devel パッケージに含まれるファイルをみれば アテナの開発で利用するヘッダファイルを確認することができます。
$ rpm -ql libXaw-devel | less
CentOS 5.x では、/usr/include 以下にヘッダファイルが格納されています。 アテナのライブラリのヘッダファイルは #include <X11/Xaw/xxx.h> として取り込みます。 (xxxは利用するGUI部品により異なる) ただしアテナはXツールキットに基づくライブラリであるため、一階層下の #include <X11/xxx.h> といったヘッダ・ファイルも利用します。
アテナを使うアプリケーションは通常、 次に示すライブラリ・モジュールをリンクすることになります。
libSMとlibICEはR6で拡張されたものなので、 それ以前のリリースを利用する場合は利用することはありません。 また Linuxでは、ライブラリがPOSIXスレッドに対応しているため、 その機能を利用する場合は libpthread も必要となります。
以後アプリケーションを紹介していくのですが、 機能単位で実行コマンドを作ると Makefileの記述が大変になるため 個々のサンプル・コードにはmainを書かず、 最初のパラメータ(サブコマンド)で 処理を切り替えるスタイルで作成していきます。 cvs や svn と同じノリです。
例えばウインドウだけ表示させるコードを動かす場合は top を最初のパラメータで渡します。
$ ./current-trial top INFO: top command started.
ちなみにパラメータを渡さないで起動した場合は、 有効なサブコマンドの一覧を表示します。