MGL API の紹介 その1

Hello World

まずは、おやくそく Hello World。
次のプログラムを、hello.c として 作ります。

#include "mgl2.h"

main() {
	if (!open_graph()) {
		exit(1);
	}

	set_color(COLOR_BLACK);
	set_font(12,0);
	draw_string(0,0,"Hello World",DIR_NORTH);
 
	get_key(-1);
	close_graph();
	exit(0);
}

そして、次のようにコンパイル/実行すると、

$ cc -o hello hello.c -lmgl2
$ ./hello

このように表示され、なにかキーを押すと終了します。

再度 hello World: "ボタンは?" という人のために

#include "mgl2.h"

main() {
	struct virtual_key *v;

	if (!open_graph()) {
		exit(1);
	}

	set_color(COLOR_BLACK);
	set_font(12,0);
	draw_string(0,0,"Hello World",DIR_NORTH);


	draw_rect(0,30,70,16);
	v = create_virtual_key(0,30,70,16,MK_V2);
	draw_string(2,32,"終了しない",DIR_NORTH);
	vk_attach(0,v);


	draw_rect(80,30,30,16);
	v = create_virtual_key(80,30,30,16,'q');
	draw_string(82,32,"終了",DIR_NORTH);
	vk_attach(0,v);

	while (get_key(-1) != 'q')
		;

	close_graph();
	exit(0);
}

このように表示され、終了ボタンをクリックするか 'q' を入力すると 終了します。

解説

この 2つの プログラム例で MGL の 思想の1つめ : 簡単なAPI をほとんどを説明できます。

まず、なにも指定したくない人は、しなくて良いということ。
初期化 open_graph はいれないといけないのですが、あと必要なのは、 文字の表示 draw_string と 終了待ち の get_key だけ。
set_color や set_font はいりませんし、close_graph さえも省略できます。
(注意: current バージョンでは、set_color() は必要です。直す予定)

get_key でキーコードを取得し、draw_string で字を書くというスタイルは、 UNIX の basic な CUI --- curses プログラミングというものに近いです。

マウスイベントは、キーコードとしてマップします。 イベントのコードとエリアを、使用者が指定します。 指定されたエリアをクリックすると、リバースされキーコードが帰ります。

システムで勝手にリバースするのは見栄えが悪い --- その通りかもしれません。 でも、それで十分な場合もあるのです。

システムが勝手にリバースせず、すべてのマウスイベントを取得することも 可能です。 ただし、その場合でも get_key によって取得できるのは、 あくまでキーコードです。

これらの API セットは、CUI プログラム --- 例えば vi に より多くの表現力を 持たせた場合どういったものが必要か ということを念頭にいれて設計しています。 ( vi そのものは移植していませんが、わたしが最も内部構造を理解している プログラム --- netmaj の curses 版 を移植しています。)


オリジナル コピー リンク ダウンロード