アテナを使ったGUIプログラミング

アテナはX標準のツールキットで正しくはAthena Widget Setといいます。 素朴な画面ですが、GUIとしての基本的な機能は押さえられていて UNIXにおいて古くから利用できるライブラリの一つです。

最近のウィンドウ・システムに慣れた人には物足らないところもあるでしょうけれど UNIXでGUIアプリケーションを作るときにはお手軽に利用できるので 覚えておいてもよいかと思います。

最近のUNIXシステムも環境が整ってきていて C++も気軽に利用できるようになってきたので ここではC++を使ってアテナのアプリケーションの作り方を紹介していきます。

前提の環境

この資料で紹介している内容は、次のプラットフォームで動作確認をしています。

CentOS 5.3

特殊な書き方は余りしていないので、 これ以外の環境でも少し修正すれば動作するものと思われます。

開発パッケージの導入

アテナの開発を行うには、関連ライブラリをパッケージで導入する必要があります。 yumを使って次のパッケージを導入してください。

libXaw-devel
libXaw 開発パッケージ
gcc-c++
C++のコンパイラ

例えば特権ユーザで次のようにタイプします。

# 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> といったヘッダ・ファイルも利用します。

アテナの開発で利用するライブラリ

アテナを使うアプリケーションは通常、 次に示すライブラリ・モジュールをリンクすることになります。

libX11
Xlibと呼ばれる、Xサーバとの通信のための基本機能が含まれる
libXmu
雑多なX関係のライブラリが含まれる
libXt
X ツールキットあるいはイントリンスクスと呼ばれる基本機能が含まれる
libXaw
アテナ・ウィジェット・セットの本体が含まれる
libSM
R6で拡張されたXのセッション管理の機能が含まれる
libICE
R6で拡張されたXクライアント通信のための機能が含まれる

libSMとlibICEはR6で拡張されたものなので、 それ以前のリリースを利用する場合は利用することはありません。 また Linuxでは、ライブラリがPOSIXスレッドに対応しているため、 その機能を利用する場合は libpthread も必要となります。

起動するモジュールの切り替え

以後アプリケーションを紹介していくのですが、 機能単位で実行コマンドを作ると Makefileの記述が大変になるため 個々のサンプル・コードにはmainを書かず、 最初のパラメータ(サブコマンド)で 処理を切り替えるスタイルで作成していきます。 cvs や svn と同じノリです。

例えばウインドウだけ表示させるコードを動かす場合は top を最初のパラメータで渡します。

$ ./current-trial top
INFO: top command started.

ちなみにパラメータを渡さないで起動した場合は、 有効なサブコマンドの一覧を表示します。