私製グラフィックライブラリ RIOLIB =========================================================================== 序. =========================================================================== High C のグラフィックライブラリは、僕にとっては「遅い」「使いにくい」「マ ニュアルがヘボい」の3拍子そろった、たいへん困ったものでした。  たしかにこのライブラリは、グラフィックを一般的に利用するための機能は非常に 充実しています。しかし、僕が TOWNS のグラフィックを使う用途と言えば、   ・ゲームづくり(それも、アクションゲーム)   ・お絵描き(または、グラフィックツールづくり) の2つしかないのです。High C のグラフィックライブラリは、この2つの点からは、 かなり使いにくくできているように思います。すくなくとも、今まで MSX2 の明解な グラフィック操作体系に慣れてきた僕にとって、このライブラリは「まわりくどい」 の一言につきます。  というわけで、MSX-C のグラフィックライブラリに似せて、自分流にライブラリを 作ってみました。モットーは「身軽、気軽、手軽」。日頃「もっとラクにグラフィッ クが扱えないものか」と感じておられる方は、ぜひ一度お試しください。  P.S. このライブラリは、グラフィック関数のほかに、キーボードやマウスの操作 関数も含みます。 =========================================================================== 関数一覧 =========================================================================== ■ グラフィックライブラリ(アセンブラ版)  アセンブリ言語で記述したグラフィックライブラリです。画面モード切り替えなど は BIOS に頼っていますが、描点・描線・矩形塗りつぶしはオールアセンブラですの で、高速です。 (定数) #define DrawNORMAL (int)0 // 描画モード #define DrawXOR (int)4 (変数) char _egbwork[]; // BIOS のワークエリア int _scrmod[2]; // 各ページの画面モード int _nowscrmod; // 現在の書き込みページの画面モード int _wrtpage; // 現在の書き込みページ (関数) void ginit (void); // 初期化 void gscreen (int mode); // 画面モードの設定 void gwrtpage (int page); // 書き込みページの設定 void gdsploc (int x, int y); // 表示位置の設定 void gscrzoom (int xrate, int yrate); // 画面拡大率の設定 void gdsparea (int xsize, int ysize); // 表示範囲の設定 void gpset (int x, int y, int col, int mode); // 点を描く int gpoint (int x,int y); // 画面上の色を読む void gline (int x1,int y1,int x2,int y2,int col,int mode); // 直線を描く void ghline (int x1, int x2, int y, int col, int mode); // 水平直線を描く void gvline (int x, int y1, int y2,int col, int mode); // 垂直直線を描く void gboxfill (int x1,int y1,int x2,int y2,int col,int mode); // 矩形塗りつぶし(矩形の座標で指定) void grboxfill (int x1,int y1,int xlen,int ylen,int col,int mode); // 矩形塗りつぶし(矩形の大きさで指定) void gboxline (int x1,int y1,int x2,int y2,int col,int mode); // 矩形(線描) (矩形の座標で指定) void grboxline (int x1,int y1,int xlen,int ylen,int col,int mode); // 矩形(線描) (矩形の大きさで指定) ■ グラフィックライブラリ(C言語版)  これは、High C の EGB ライブラリをそのまま呼び出すだけの関数です。しかし、 High C のライブラリをそのまま使うよりは簡単に呼び出せます。 (変数) char *EGB_work; (関数) void grp_init (void); void grp_mode (int mode); void grp_mode2 (int mode); void grp_scrZoom (int xrate, int yrate); void grp_cls (void); void grp_dispPos (int x, int y); int grp_getMode (void); int grp_getWrtpage (void); void grp_setWrtpage (int page); void grp_pset (int x, int y, int col, int mode); int grp_point (int x, int y); void grp_line (int x1, int y1, int x2, int y2, int col, int mode); void grp_boxline (int x1, int y1, int xlen, int ylen, int col, int mode); void grp_boxfill (int x1, int y1, int xlen, int ylen, int col, int mode); void grp_getblk (int x1, int y1, int xlen, int ylen, char *buf); void grp_putblk (char *data, int x1, int y1); void grp_copy (int sx1, int sy1, int sxlen, int sylen, int sp, int dx1, int dy1, int dp, int mode ); void grp_setplt (int plt, int rgb); // bit23-16:赤 bit15-8:緑 bit7-0:青 int grp_getplt (int plt); // bit23-16:赤 bit15-8:緑 bit7-0:青 void grp_putstr (int x, int y, char *str, int col ); ■ キーボード、マウス関連 (型) typedef struct { int x,y; int dx,dy; char btn1,btn2; } MSDAT; (定数) #define OFF (char)0 #define ON (char)1 #define OFFON (char)2 #define ONOFF (char)3 (関数) void key_init (void); char key_get (void); int key_chk (void); char key_read (void); void key_clrbuf (void); void minit (void); void mend (void); void rdmos (MSDAT *msdat); ■ その他 (型) typedef struct { int year,mon,day, hour,min,sec; } TIME; (関数) int extwildcard (char *wildcard, char *namebuf[], int maxnames); // ワイルドカードの展開 void TIFFload (char *fname); // 圧縮/非圧縮 TIFF (320*240,32K色) の読み込み void TIFFsave (char *fname); // 圧縮 TIFF (320*240,32K色) ファイルの作成 int getftime (char *fname, TIME *timebuf); // 成功すれば 0 を返す // ファイルの作成時刻を調べる void getnowtime (TIME *timebuf); // 現在時刻を調べる