|
ScreenShot
/
特徴·機能
/
必要条件
/
ソースパッケージ·インストール方法
/
pdfマニュアル
/
FAQ
/
LICENSE
/
リンク集
EGGX / ProCALL (えっぐえっくす / ぷろこーる)
は,究極の簡単さを目指して作成した
C言語,FORTRAN言語用のX11グラフィックスライブラリです(C++からも利用可能です).
懐かしの N88-BASIC 風の描画関数を使って
X Window System上で簡単に 2Dグラフィックスを楽しむことができます.
とにかく「簡単」に使えて「8ビットマシン時代のBASICのような楽しさ」を
これからプログラミングを始める方々に伝えたいと考え,
主に初等プログラミング教育を目的として作成したものです.
10年前のPCでも十分な描画速度が確保できますから,
「アニメーションを作成しなさい」といった課題にも対応できます.
また,このライブラリは数値計算の可視化においても,
強力なソリューションを提供します.一般的な可視化ツールと異なるのは,
計算コードから直接 X11 用の描画関数(サブルーチン)を呼べる
という点です.
長時間の計算を要するシミュレーションなどで計算中の状況を把握をしたい場合,
一般にはめんどうな実装をする必要があります.
しかし,このライブラリでは大変簡単に実装可能な上,
EGGX / ProCALL は大変軽量でコンパクトなライブラリで
メモリを消費しませんから,安心してリンクできます.
EGGX / ProCALL はX11関連のライブラリはXlibしか使っていません.
したがって,UNIX環境であればどこでも容易にインストールできます.
キーワード: EGGX / ProCALL / C言語 / C++ / FORTRAN
/ UNIX / Linux / MacOSX / Cygwin
/ X11 / X Window System / Xlib / グラフィックス / グラフィック
/ ライブラリ / 簡単 / 手軽 / 初心者 / ビギナー / BASIC / N88-BASIC
/ プログラミング入門 / 数値計算 / シミュレーション
/ 可視化 / プログラミング教育 / 情報教育
■EGGX / ProCALL を用いて作ったプログラムのスクリーンショットとソースコード
■EGGX / ProCALLの特徴・機能
★究極の簡単さ,手軽さ
- ウィンドゥサイズのみを引数とするたった1つの関数で窓を開き,
即,描画関数を使える.
- 関数は BASIC ライク.リファレンスを見ればすぐに使え,
教育用途やビギナーに最適.
- ウィンドゥが隠れた時の
再描画処理はライブラリ側で完全に行う
のでユーザはめんどうなイベントを気にせず,単に描画関数を並べるだけでよい.
X サーバの負担となる BackingStore 属性による暫定的な解決や
タイマー割り込みを使った再描画処理ではなく,
子プロセスが常に Expose イベントを監視して,
Window の再描画が必要な場合に Pixmap から瞬時にコピーするようにしています.
- 専用のコンパイルコマンドを用意.
Makefile は不要.コンパイル時のオプションも不要.
gcc,gfortran(またはg77かf77)でコンパイルした事がある人なら,すぐに使える.
- X11 関連で使用しているライブラリは Xlib のみで大変ポータブル.
gcc,make,X11環境さえあれば,いつでもすぐにインストールできる.
- GrWin や HandyGraphic のような
ランタイムファイルのインストールは不要.
EGGX/ProCALL で作成した実行ファイルは,
立派なアプリケーション・ソフトウェアになります.
もちろん,同一 OS の場合は実行ファイルをもっていくだけで
EGGX/ProCALL をインストールしていない環境でも動作します.
★それなりの機能
- ファイルと同じ感覚で複数のウィンドゥをオープン.
- 点,線,多角形,円,文字,シンボル,様々な矢印などを 24ビットカラーで描画.
- カラー生成関数を用意(0.71以降).
DS9 , IDL コンパチの約50種類のカラー生成モード
をライブラリに持っているため,カラーコントアの作成も楽々.
- レイヤ機能(ダブルバッファリング)によるスムーズなアニメーションが簡単に実現可能.
N88-BASIC の SCREEN 命令の裏画面,表画面に相当.
- 24ビット画像イメージの転送
(X サーバにあわせてフォーマットをライブラリ側で変換).
- netpbm,
ImageMagick
が対応しているすべてのフォーマットに画像を連続して保存可能.
gif アニメーション,mpeg 動画の作成も楽々.
新しいフォーマットに対応させたい場合でも, EGGX/ProCALL の再コンパイルは不要.
- BASICの
INKEY$ を実装(ggetch 関数).
シューティングゲームや落ちものゲーム等,いろんなゲームが作成可能.
- マウス入力にも対応(
ggetevent 関数).お絵描きツールなどが作成可能.
- 日本語(フォントセット)の描画(V.0.73 以降).
- AfterStep,WindowMaker の アプレットが手軽に作成可能.
- 商用の X サーバなどの複数の Visual を持つ X サーバに対応(V.0.75 以降).
X サーバで TrueColor Visual が使えれば,
デフォルトが PseudoColor でも TrueColor で窓をオープン.
■必要条件
- Cコンパイラ, make がインストールされているUNIX系OS
(Linux,MacOSX,Solaris,FreeBSD,NetBSD,IRIX 等),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 on WindowsXP, 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 でインストール完了!
■ソースパッケージとインストール方法
◆最新版 Version 0.90 (2010年1月31日リリース) → eggx-0.90.tar.gz
UTF-8環境での日本語描画対応,フォント選択のfallback強
化,色切替関数の高速化,描画関数の追加,手動flush対応,Cygwin向けの改良など,改良多数
【eggx-0.90 での API 変更に関するお願い】
Version 0.85 から導入されたノンブロッキングモードでの API 整合性を改善するため,
Version 0.90 にて,次の 2 つの関数の仕様を変更しました.
お手数ですが,教材等のアップデートをお願いします.
・ggetch()
引数 win が無くなり,EGGX の全ウィンドゥからのキー入力を返すようになりました.
key = ggetch(win); /* Version 0.85 まで */
↓
key = ggetch(); /* Version 0.90 から */
のように変更をお願いします.
・ggetxpress()
第一引数が int win から int *type に変更,返り値がウィンドゥ番号に変更となり,
ggetevent() とほぼ同じ API 仕様となりました.
type = ggetxpress(win,&b,&x,&y) /* Version 0.85 まで */
↓
if ( ggetxpress(&type,&b,&x,&y) == win ) { ... } /* Version 0.90 から */
のように変更をお願いします.
また,line()関数は,moveto()・lineto()関数に置き換える事を推奨します.
|
◆pdfマニュアル → eggx_procall.ja.pdf
☆Version 0.85r1(2010年1月22日リリース)
ggetevent()等にノンブロッキングモードが使えるようにしました.newhsvcolor()を追加しました(京都産業大学の安田様に感謝).月面着陸ゲームを収録しました(東京電機大学の松田様に感謝)
☆Version 0.84(2009年11月14日リリース)
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 を用意しました.
★インストール方法
RPMな方は spec ファイルを取得して rpm でビルドする事もできます.
- - X11/X.h が入っているかを確認する
/usr/include/X11/X.h
または
/usr/X11R6/include/X11/X.h
が存在するかどうかを確認してください.
ディストリビューションによっては,
EGGX の構築に必要なヘッダファイルがインストールされない事があります.
その場合は,各ディストリビューションが用意している X11 の開発用の
パッケージをインストールしてください.
Vine Linux の例を以下に示します.
% su
# apt-get install XOrg-devel
# exit
|
Fedora の例を以下に示します.
% su
# yum install libX11-devel
# yum install japanese-bitmap-fonts
# exit
|
- - ソースを展開する
% gzip -dc eggx-0.90.tar.gz | tar xvf -
% cd eggx-0.90
|
- -
Makefileを選び,必要に応じて編集
- Linux, Cygwin, Solaris用などの
Makefile
を用意してあるので,OS にあわせて
% ln -sf Makefile.linux Makefile | ← Linux,MacOSX,FreeBSDなどの場合 |
% ln -sf Makefile.linux64 Makefile | ← 64-bit Linux の場合 |
% ln -sf Makefile.cygwin Makefile | ← Cygwin の場合 |
のようにリンクし,
Makefileの
IINC,
LLIB
を環境にあわせて
変更してください (ほとんどの場合,変更の必要はありません).
EGGX のライブラリファイル,ヘッダファイルはデフォルトでは
/usr/local/lib/,
/usr/local/include/ にインストールする設定
になっています.
これは Makefile の
PREFIX で変更できます.
root になれない場合は /usr/local/
以下にはインストールできないと思いますが,
その場合はユーザのホームディレクトリ上の
1 つのディレクトリに EGGX のコンパイル用スクリプト,
ライブラリファイル,ヘッダファイルをまとめて入れる事をお勧めします.
このようにしておくと,コンパイル用スクリプトは,
インクルードファイル,ヘッダファイルのパスを
自動的に設定するようになっており,この場合は Makefile の
PREFIX の修正は不要です.
Makefile の CC,
USERCC,
USERFC の部分を確認し,
必要に応じて修正してください.EGGX/ProCALL をビルドする時のコンパイラと,
ユーザが使うコンパイラを別々に指定できます.
- - make します.
-
- -
egg , eggx*.h と libeggx.a をコピーします.
-
su で root になり,
make install します.
【例】- root になれる場合
root になれない場合は,次のように
libeggx.a, eggx*.h, egg
を同一ディレクトリにコピーしてください.
【例】- root になれない場合
(ホーム上の EGGX というディレクトリに入れる)
% mkdir ~/EGGX
% cp libeggx.a eggx*.h egg ~/EGGX/.
% cd ~/EGGX/
|
※コンパイルには egg コマンドを使いますが,この場合
は ~/EGGX に
PATH を通すか,フルパスで実行してください.
Mac OS X の場合は,念のため以下のように ranlib しておいてください.
# ranlib /usr/local/lib/libeggx.a
|
- - パッケージャの方へ
-
Makefile では
PREFIX と DESTDIR
が使えるようになっています.ご利用ください.
★動作テスト
ディレクトリ
sample,sample.euc,sample.utf-8
にいくつかのサンプルプログラムが入っているので,
それで動作確認をしましょう.
- - sample/clock.c … シンプルなデジタル時計
-
% cd sample
% make clock
% ./clock & |
- - sample.{euc,utf-8}/nihongo.c … 基本的な日本語の表示のテスト
-
% cd sample.euc
% make nihongo
% ./nihongo & |
環境にあわせて,適切なディレクトリ sample.euc か
sample.utf-8 を選んでください.
もし,nihongo を実行した時,日本語が表示されない場合は,
Xサーバのフォントのインストールが不十分ですので,
フォントをインストールしてください.
■FAQ
★描画速度が遅いです!なんとかなりませんか?
そのプログラム,表示レイヤに直接描画していませんか?
EGGX/ProCALL では,ウィンドゥが隠れて露出した時の再描画を行なうため,
表示レイヤに描画する場合は,「表示しているウィンドゥ」と
バックアップ用の「見えないウィンドゥ」との両方に描画命令を送っています.
さらに,描画命令をすぐに反映するために,毎回命令をフラッシュしています.
こういった理由から,表示レイヤへの直接描画は
Xサーバによっては遅くなる事があります.
この描画速度の低下を回避する方法は,layer()関数を使って,
非表示レイヤーに対して描画関数を一気に使い,
最後にcopylayer()関数を使って表示レイヤにコピーする事です.
これにより,描画命令の数とフラッシュの頻度を最小限にする事ができ,
高速な描画が可能となります.
★文字サイズは24ドットまでしか使えません! 日本語が描けません!
EGGX/ProCALL では,巨大な文字も日本語も描く事ができます(Ver.0.90からはUTF-8でもOK).
以下は,96ドットで「日本語も描けます」という文字を描画する例です.
xfontsel などを使って,スケーラブルフォントのフォント名を確認し,
gsetfontset()の第2引数をセットします.
-
gsetfontset(win,"-*-gothic-medium-r-normal--%d-*-*-*-c-*-*-*",96);
drawstr(win,x,y,FONTSET,0,"日本語も描けます。");
|
■ライセンス
GPL とします.
このライブラリの個人利用,商用利用を問わず,金品を要求するつもりは
全くありません.どなたでも無料でご利用いただけます.
強制ではありませんが,個人利用以外の場合(教育機関等の実習での利用や二次配布を行う場合など)については一応
電子メール
にて御連絡いただくと助かります(利用状況を把握しておきたいので).
もちろん,インストールがうまくいかないといった質問にもお答えしています.
お気軽にどうぞ.
■リンク集
EGGX/ProCALL を使って何かいいものができましたらご連絡ください.
●派生ライブラリ・アプリケーション等
●収録されているディストリビューション等
●情報教育や研究での活用
|