EGGX / ProCALL
 ScreenShot / 特徴・機能 / 必要条件 / ソース・インストール方法 / pdfマニュアル / FAQ / ライセンス / リンク集

 EGGX / ProCALL は,究極の簡単さを目指して作成した C言語,FORTRAN言語用のX11グラフィックスライブラリです. 懐かしの BASIC 風の pset, line といった関数 を使って X Window System上で簡単に2Dグラフィックスを楽しむことができます. とにかく「簡単」に使えて「8ビットマシン時代のBASICのような楽しさ」を これからプログラミングを始める方々に伝えたいと考え, 主に初等プログラミング教育向きに作成したものです. また,EGGX / ProCALL はX11関連のライブラリはXlibしか使っていませんから, UNIX環境であればどこでも容易にインストールできます.
 また,このライブラリは数値計算の可視化においても, 強力なソリューションを提供します.一般的な可視化ツールと異なるのは, 計算コードから直接 X11 用の描画関数(サブルーチン)を呼べる という点です. 長時間の計算を要するシミュレーションなどで計算中の状況を把握をしたい場合, 一般にはめんどうな実装をする必要があります. しかし,このライブラリでは大変簡単に実装可能な上, EGGX / ProCALL は大変軽量でコンパクトなライブラリで メモリを消費しませんから,安心してリンクできます.

キーワード: EGGX / ProCALL / C言語 / FORTRAN言語 / UNIX / Linux / X11 / X Window System / Xlib / グラフィックス / グラフィック / ライブラリ / 簡単 / 手軽 / 初心者 / ビギナー / BASIC / プログラミング入門 / 数値計算 / シミュレーション / 可視化 / プログラミング教育 / 情報教育


EGGX / ProCALL を用いて作ったプログラムのスクリーンショットとソースコード

スクリーンショット ソースコード コンパイル方法
マンデルブロ集合 sshot_mandel.png mandel.c egg mandel.c -o mandel
ロッシュワールド sshot_roche.png roche.c egg roche.c -o roche
カラーバー sshot_colorbars.png colorbars.f pro colorbars.f -o colorbars
カラーバー sshot_sep_colorbars.png sep_colorbars.c egg sep_colorbar.c -o sep_colorbar
モナーとギコ (2ちゃんねるAA.要モナーフォント) sshot_2ch.png 2ch.c egg 2ch.c -o 2ch
ルパン三世 (要東風ゴシック) sshot_rupin.png 注意! xtt モジュール を組み込んだ X はクラッシュします! 修正モジュールか freetype モジュールを使ってください. rupin.c egg rupin.c -o rupin
デジタル時計 sshot_clock.png clock.c egg clock.c -o clock
AfterStep/WindowMakerドック時計 sshot_plamoclock.png plamoclock.c
plamoclock.h(画像)
egg plamoclock.c -o plamoclock
AfterStep/WindowMakerドック時計 sshot_ayuclock.png ayuclock.c
ayu.h
Web素材(回転する星) ←コレ rstar.c egg rstar.c -o rstar
銀河衝突(最も初歩的なテスト粒子による計算です) MPEGムービー int1.c egg int1.c -o int1
重力レンズ MPEGムービー COOL HOT


EGGX / ProCALLの特徴・機能

究極の簡単さ,手軽さ
  • ウィンドゥサイズのみを引数とするたった1つの関数で窓を開き, 即,描画関数を使える.
  • 関数は BASIC ライク.リファレンスを見ればすぐに使え, 教育用途やビギナーに最適.
  • ウィンドゥが隠れた時の再描画処理はライブラリ側で 完全に行うのでユーザはめんどうなイベントを気にせず, 単に描画関数を並べるだけでよい.
    X サーバの負担となる BackingStore 属性による暫定的な解決や タイマー割り込みを使った再描画処理ではなく, 子プロセスが常に Expose イベントを監視して, Window の再描画が必要な場合に Pixmap から瞬時にコピーするようにしています.
  • 専用のコンパイルコマンドを用意. Makefile は不要.コンパイル時のオプションも不要. gcc,g77(f77)でコンパイルした事がある人なら,すぐに使える.
  • X11 関連で使用しているライブラリは Xlib のみで大変ポータブル. gcc,make,X11環境さえあれば,いつでもすぐにインストールできる.
  • GrWin のような ランタイムファイルのインストールは不要
    EGGX/ProCALL で作成した実行ファイルは, 立派なアプリケーション・ソフトウェアになります. もちろん,同一 OS の場合は実行ファイルをもっていくだけで EGGX/ProCALL をインストールしていない環境でも動作します.
それなりの機能
  • ファイルと同じ感覚で複数のウィンドゥをオープン.
  • 点,線,多角形,円,文字,様々な矢印などを24ビットカラーで描画.
  • カラー生成関数を用意(0.71以降). DS9 , IDL コンパチの約50種類のカラー生成モード をライブラリに持っているため,カラーコントアの作成も楽々.
  • レイヤ機能によるスムーズなアニメーション.
    N88-BASIC の SCREEN 命令の裏画面,表画面に相当.
  • 24ビット画像イメージの転送 (X サーバにあわせてフォーマットをライブラリ側で変換)
  • netpbmImageMagick が対応しているすべてのフォーマットに画像を連続して保存可能.
    gif アニメーション,mpeg 動画の作成も楽々. 新しいフォーマットに対応させたい場合でも, EGGX/ProCALL の再コンパイルは不要.
  • BASICの INKEY$ を実装(ggetch 関数).
  • マウス入力(ggetevent 関数).
  • 日本語(フォントセット)の描画(V.0.73 以降).
  • AfterStep,WindowMaker の アプレットが手軽に作成可能.
  • 商用の X サーバなどの複数の Visual を持つ X サーバに対応(V.0.75 以降).
    X サーバで TrueColor Visual が使えれば, デフォルトが PseudoColor でも TrueColor で窓をオープン.
今後の拡張予定
  • 座標軸の描画関数.
  • カラーを多用した場合の描画速度の改善.
  • netpbmを通した画像の読み出し.
  • レイヤの追加.

必要条件

  • Cコンパイラ, make がインストールされているUNIX系OS,cygwin, Windows Services for UNIX(要Xサーバ) など.
    gcc, IRIX 純正, Solaris 純正 C コンパイラでビルド可能な事を確認.
    Linux(i386,x86_64,Alpha), Solaris2.6,8(Sparc), FreeBSD(i386),NetBSD,IRIX(indigo2,PowerOnyx2), Mac OS X 10.2.2, HP-UX, cygwin, Windows Services for UNIX で動作を確認.
  • X11R6か互換のX11がインストールされている事
  • TrueColor Visual が使える X サーバ(16bpp 以上)を推奨.
    PseudoColor しか使えない X サーバの場合, いくつかの関数が利用できません.
    X サーバ は,XFree86(i386Linux,Mac OS X), Xsun(SparcSolaris), SGI PowerOnyx2 X端末, Astec-X 4.0 ,Exceed V6.1,V7.1(WindowsNT) で動作を確認.
  • ppm 形式以外でのフォーマットで画像の保存を行うためには, netpbm あるいは ImageMagick のインストールが必要.
    ./configure ; make ; make install でインストール完了!
    Plamo 用 ImageMagick パッケージ

ソースパッケージとインストール方法

最新版 Version 0.84(2009年11月14日リリース) → eggx-0.84.tar.gz
 Fedora11等の環境で,フォントが見つからない時にSEGVするバグを修正
★Version 0.83(2008年2月9日リリース)
 ggetevent() を追加(マウスのモーションイベントにも対応).使い方は sample/mousetst2.cを参照してください.
★Version 0.81(2006年2月17日リリース)
 stdarg まわりのバグ修正.
 0.81用のRPM specファイル(嶋田様,金様に感謝)
★Version 0.80(2004年1月26日リリース)
 eggxlib.h を include することで,eggx_ で始まる関数名で 使えるようにしました.また,FORTRAN の rtoc サブルーチンのバグを修正しました.
★Version 0.79r1(2003年3月16日リリース)
cygwin,X on Windows対応、drawstr() での不具合修正、HP-UX,HP-UX64,Solaris64 用 Makefile を用意しました.
☆pdfマニュアル → eggx_procall.pdf

 特に、cygwin,X on Windows については、問題点などあれば指摘してください. 簡単なテストは cygwin on NT4.0 で行ないましたが, 作者は自分用の cygwin 環境を持っていないので, あまりきちんとテストできていません.

インストール方法
 RPMな方は spec ファイルを取得して rpm でビルドする事もできます.
- X11/X.h が入っているかを確認する
/usr/X11R6/include/X11/X.h が存在するかどうかを確認してください. Vine Linux のような一部の特殊なディストリビューションでは, EGGX の構築に必要なヘッダファイルがインストールされない事があります. その場合は,各ディストリビューションが用意している X11 の開発用の パッケージをインストールしてください.Vine Linux の例を以下に示します.
% su
# apt-get install XOrg-devel
# exit
- ソースを展開する
% gzip -dc eggx-0.84.tar.gz | tar xvf -
% cd eggx-0.84
- Makefileを選び,編集
linux, SunOS, SGI, Netbsd用などの Makefile を用意してあるので,
% ln -sf Makefile.linux Makefile
% vi Makefile
のようにリンクし, MakefileIINC, LLIB, を環境にあわせて 変更してください.
  EGGX のライブラリファイル,ヘッダファイルはデフォルトでは /usr/local/lib/, /usr/local/include/ にインストールする設定 になっています. これは MakefileLOCALINC, LOCALLIB で指定 します.
 root になれない場合は /usr/local/ 以下にはインストールできないと思いますが, その場合はユーザのホームディレクトリ上の 1 つのディレクトリに EGGX のコンパイル用スクリプト, ライブラリファイル,ヘッダファイルをまとめて入れる事をお勧めします. このようにしておくと,コンパイル用スクリプトは, インクルードファイル,ヘッダファイルのパスを 自動的に設定するようになっていて,この場合は MakefileLOCALINC, LOCALLIB の 修正は不要です.よく理解されている方は MakefileLOCALINC, LOCALLIB のある行を適宜修正してください.
 Makefile の CC, USERCC, USERFC の部分を確認し, 必要に応じて修正してください.EGGX/ProCALL をビルドする時 のコンパイラと,ユーザが使うコンパイラを別々に指定できます.
- make します.
% make
- egg , eggx*.hlibeggx.a をコピーします.
su で root になります.libeggx.a/usr/local/lib/ などディレクトリに, eggx*.h/usr/local/include/ などに, egg/usr/local/bin/ などのパスの通ったディレクトリにコピーします.最後に, /usr/local/binpro -> egg のシンボリックリンクを 張ります.
【例】- root になれる場合
% su
# cp libeggx.a /usr/local/lib/.
# cp eggx*.h /usr/local/include/.
# cp egg /usr/local/bin/.
# cd /usr/local/bin
# ln -s egg pro
 root になれない場合は libeggx.a, eggx*.h, egg を同一ディレクトリにコピーしてください.
 もちろん,MakefileLOCALINC, LOCALLIB を修正した場合は, 適切な場所に libeggx.a, eggx*.h, egg をコピーしてください.
【例】- root になれない場合 (ホーム上の EGGX というディレクトリに入れる)
% mkdir ~/EGGX
% cp libeggx.a eggx*.h egg ~/EGGX/.
% cd ~/EGGX/
% ln -s egg pro
※コンパイルには eggpro コマンドを使いますが,この場合 は ~/EGGXPATH を通すか,フルパスで実行してください.
 Mac OS X の場合は,念のため以下のように ranlib しておいてください.
# ranlib /usr/local/lib/libeggx.a
動作テスト
 sample というディレクトリにいくつかのサンプルプログラムが入っているので, それで動作確認をしましょう.
- clock.c … ただのデジタル時計です
% egg clock.c -o clock
% ./clock &
- roche.c … 近接連星系のロッシュポテンシャル
% egg roche.c -o roche
% ./roche &
'c'キー,カーソルキーで色が変化します.

FAQ

描画速度が遅いです!なんとかなりませんか?
 そのプログラム,表示レイヤに直接描画していませんか?
 EGGX/ProCALL では,ウィンドゥが隠れて露出した時の再描画を行なうため, 表示レイヤに描画する場合は,「表示しているウィンドゥ」と バックアップ用の「見えないウィンドゥ」との両方に描画命令を送っています. さらに,描画命令をすぐに反映するために,毎回命令をフラッシュさせています. こういった理由から,表示レイヤへの直接描画はかなり遅いものになっています.
 この描画速度の低下を回避する方法は,layer()関数を使って, 非表示レイヤーに対して描画関数を一気に使い, 最後にcopylayer()関数を使って表示レイヤにコピーする事です.

文字サイズは24ドットまでしか使えません! 日本語が描けません!
 それは嘘です.EGGX/ProCALL では,巨大な文字も日本語も描く事ができます.
 以下は,96ドットで「日本語も描けます」という文字を描画する例です. xfontsel などを使って,スケーラブルフォントのフォント名を確認し, gsetfontset()の第2引数をセットします.

gsetfontset(win,"-*-gothic-medium-r-normal--%d-*-*-*-c-*-*-*",96);
drawstr(win,x,y,FONTSET,0,"日本語も描けます。");

ライセンス

 Windows上料金 のかかる シェアウェア とは異なり, EGGX / ProCALL は フリーソフトウェア です (こんなちっぽけなライブラリに ライセンスがどうのこうのあるのかぁ? とは思いますが,一応 GPL という事にしておきます). このライブラリの個人利用,商用利用を問わず,金品を要求するつもりは 全くありません.どなたでも完全に無料でご利用いただけます.
 強制ではありませんが個人利用以外の場合(教育機関等の実習での利用や二次配布を行う場合など)については一応 電子メール にて御連絡いただくと助かります(利用状況を把握しておきたいので). もちろん,インストールがうまくいかないといった質問にもお答えしています. お気軽にどうぞ.


リンク集

 EGGX/ProCALL を使って何かいいものができましたらご連絡ください.