Kanji code of this file is Shift-JIS code. MS-DOS, UNIX OS 共用テキスト画面制御関数集 disp_ctr ver. 1.82 Programmed by Kenzi NOIKE disp_ctr.c は、エスケープシーケンスを用いてテキスト画面制御を 容易に行うための関数集である。テキスト表示関数は、printf を 拡張した形の呼出し形式で実現しているので、curses よりは馴染み やすいと思う。ただし、curses と異なり、/etc/termcap ファイルを 参照していないので、環境によっては、正しく動作しない可能性も ある。とりあえず、MS-DOS 上では問題なく動作し、筆者が試せる 環境(Linux, FreeBSD, NEWS OS 上)でもほとんどの関数について、 動作することを確認している。 とりあえず、デモを見て、それのソースを参考にして欲しい。わからない ところは、気軽に野池にきいてほしい。 disp_ctr.tgz を展開すると、 Makefile デモを作るためのメイクファイル disp_ctr.txt disp_ctr の説明書 disp_ctr.h disp_ctr 用ヘッダファイル disp_ctr.c disp_ctr 本体 dispdemo.c disp_ctr 超簡易デモ の 5 ファイルが現れるので、 % make depend % make とする。あるいは、 % cc -o dispdemo -DUNIX dispdemo.c disp_ctr.c とする。すると、dispdemo(と disp_ctr.o と dispdemo.o)が生成 されるので、 % dispdemo として実行する。こんな感じである。 disp_ctr.c に収められている関数を使用するソースファイルは、 disp_ctr.h を #include しなければならない。また、(よくない 仕様であるが)disp_ctr.h を #include する前に、stdio.h を #include しておく必要がある。 disp_ctr.c を Linux, FreeBSD, NEWS OS 上でコンパイルするときは、 定数 UNIX を定義する必要がある。たとえば、 cc -c -DUNIX disp_ctr.c などとする。 disp_ctr.c に収められている関数を使用して出力した文字列等を ファイルにリダイレクトすると、多くの場合、エスケープシーケンス コードがじゃまになり見づらくなる(MS-DOS 上の場合、miel 等の エスケープシーケンス対応ビューワを使用すれば問題無い)。 そのようなときは、筆者が別途配布している esccut でフィルタリングし、 リダイレクトするとよい。 disp_ctr.c には、次の関数が収められている。 テキスト文字表示色を num 番に設定する。 int color(int num) num == 0 -> 黒 num == 1 -> 青 num == 2 -> 赤 num == 3 -> 紫(ピンク) num == 4 -> 緑 num == 5 -> 水色 num == 6 -> 黄色 num == 7 -> 白 num == -1 -> 規定の色(デフォルトの色)に戻す テキスト表示背景色を num 番に設定する。 int r_color(int num) MS-DOS 上の場合、テキスト文字表示色を、点滅する num 番に設定する。 (UNIX OS 上の場合、テキスト文字表示を、太字フォントに設定する。) int b_color(int num) MS-DOS 上の場合、テキスト表示背景色を、点滅する num 番に設定する。 (UNIX OS 上の場合、テキスト文字表示を、太字フォントに設定する。) int br_color(int num) カーソル位置を座標(x, y) へ移動する。 座標は、左上が(1, 1)である。 int xy(int x, int y) 拡張 printf 関数群 c が付く関数は、テキスト文字表示色を指定できる。 rc が付く関数は、テキスト表示背景色を指定できる。 brc が付く関数は、テキスト表示点滅背景色を指定できる。 (UNIX OS 上の場合、テキスト文字表示を太字フォントに設定し、背景色を設定する。) x が付く関数は、テキスト文字表示 x 座標を指定できる。(x >= 1) y が付く関数は、テキスト文字表示 y 座標を指定できる。(y >= 1) int c_printf(int c, char *format, ...) int rc_printf(int c, char *format, ...) int bc_printf(int c, char *format, ...) int brc_printf(int c, char *format, ...) int xy_printf(int x, int y, char *format, ...) int xyc_printf(int x, int y, int c, char *format, ...) int xyrc_printf(int x, int y, int c, char *format, ...) int xybc_printf(int x, int y, int c, char *format, ...) int xybrc_printf(int x, int y, int c, char *format, ...) 拡張 scanf 関数群 c が付く関数は、scan 時のテキスト文字表示色を指定できる。 rc が付く関数は、scan 時のテキスト表示背景色を指定できる。 brc が付く関数は、scan 時のテキスト表示点滅背景色を指定できる。 x が付く関数は、scan 時のテキスト文字表示 x 座標を指定できる。(x >= 1) y が付く関数は、scan 時のテキスト文字表示 y 座標を指定できる。(y >= 1) int c_scanf(int c, char *format, ...) int rc_scanf(int c, char *format, ...) int bc_scanf(int c, char *format, ...) int brc_scanf(int c, char *format, ...) int xy_scanf(int x, int y, char *format, ...) int xyc_scanf(int x, int y, int c, char *format, ...) int xyrc_scanf(int x, int y, int c, char *format, ...) int xybc_scanf(int x, int y, int c, char *format, ...) int xybrc_scanf(int x, int y, int c, char *format, ...) カーソル位置から右端までを消去 int clr_to_right(void) 現在行の座標 x から右端までを消去 int x_clr_to_right(int x) 現在行の相対座標 x から右端までを消去 int rel_x_clr_to_right(int x) 座標 x, y から右端までを消去 int xy_clr_to_right(int x, int y) カーソル位置から左端までを消去 int clr_to_left(void) 座標 x, y から左端までを消去 int xy_clr_to_left(int x, int y) 現在行の座標 x から左端までを消去 int x_clr_to_left(int x) 現在行の相対座標 x から左端までを消去 int rel_x_clr_to_left(int x) カーソル位置の行を消去 int clr_line(void) 座標 y の行を消去 int y_clr_line(int y) 座標 x, y の行を消去 int xy_clr_line(int x, int y) テキスト画面消去(ESC * は 98 特有らしいので、ESC[2Jに直した int cls(void) ys 行から ye 行までを消去 void clr_w_y(int ys, int ye) xs 桁から xe 桁までを消去 void clr_w_x(int xs, int xe) 座標(left, top) と座標(right, bottom) を対角点とする長方形領域を消去 void clr_w_xy(int left, int top, int right, int bottom) 拡張 fprintf 関数群 エスケープ文字列を含んだファイルを作るときなどに使用する。 fp = stdout -> 標準出力 fp = strprn -> プリンタ (MS-DOS 上で fp = (nul ファイルへのポインタ) -> 非表示モード) という具合に、出力先を簡単に切り替えたいときなどにも使用できる。 c が付く関数は、テキスト文字表示色を指定できる。 rc が付く関数は、テキスト表示背景色を指定できる。 brc が付く関数は、テキスト表示点滅背景色を指定できる。 x が付く関数は、テキスト文字表示 x 座標を指定できる。(x >= 1) y が付く関数は、テキスト文字表示 y 座標を指定できる。(y >= 1) int c_fprintf(int c, FILE *fp, char *format, ...) int rc_fprintf(int c, FILE *fp, char *format, ...) int bc_fprintf(int c, FILE *fp, char *format, ...) int brc_fprintf(int c, FILE *fp, char *format, ...) int xy_fprintf(int x, int y, FILE *fp, char *format, ...) int xyc_fprintf(int x, int y, int c, FILE *fp, char *format, ...) int xyrc_fprintf(int x, int y, int c, FILE *fp, char *format, ...) int xybc_fprintf(int x, int y, int c, FILE *fp, char *format, ...) int xybrc_fprintf(int x, int y, int c, FILE *fp, char *format, ...) カーソルのある行から下を l 行削除し、以降の行を上に詰める。 カーソル位置は詰められた行の左端になる。 最終行を超えての削除は行わない。 l = 0 は l = 1 と同様に処理される。 int del_line(int l) カーソルを座標(x, y) に移動し、del_line 関数を実行する。 int xy_del_line(int x, int y, int l) カーソルの行以降を l 行下に移動し、空白の l 行を挿入する。 カーソルは先頭の挿入行の左端に移動する。 挿入行が最終行を超えたり、移動する行が最終行を超えた場合は、 その超えた行は失われる。l = 0 は、l = 1 と同様に処理される。 int ins_line(int l) カーソルを座標(x, y) に移動し、ins_line 関数を実行する。 int xy_ins_line(int x, int y, int l) カーソルを y 行上に移動する。 最上行より上を指定しても、スクロールしない。 y = 0 は、y = 1 と同様に処理される。 int up_no_scroll(int y) カーソルを y 行下に移動する。 最下行より下を指定しても、スクロールしない。 y = 0 は、y = 1 と同様に処理される。 int down_no_scroll(int y) カーソルを x 桁右へ移動する。右端でとまる。 x = 0 は、x = 1 と同様に処理される。 int right(int x) カーソルを x 桁左へ移動する。左端でとまる。 x = 0 は、x = 1 と同様に処理される。 int left(int x) カーソル位置から右下までを消去。カーソル位置はそのままで、移動しない。 int clr_to_right_bottom(void) 座標(x, y) にカーソルを移動し、clr_to_right_bottom を実行する。 int xy_clr_to_right_bottom(int x, int y) カーソル位置から左上までを消去。カーソル位置はそのままで、移動しない。 int clr_to_left_top(void) カーソルを 1 行下に移動。最終行にあるときは 1 行スクロールアップする。 int one_down(void) カーソルを 1 行下の左端に移動する。カーソルが最下行にあるときは、 スクロールアップする。 int one_down_left_end(void) カーソルを 1 行上に移動する。 カーソルが先頭行にあるときは 1 行スクロールダウンする。 これを利用して逆スクロールができる。 int one_up(void) カーソルを y 行上に移動する(y 回 one_up を実行する)。 int up(int y) カーソルを y 行下に移動する(y 回 one_down を実行する)。 int down(int y) カーソルを相対座標(x, y) へ移動する。 int rel_xy(int x, int y) カーソルを相対桁数 x へ移動する。 int rel_x(int x) 拡張 printf 関数群 c が付く関数は、テキスト文字表示色を指定できる。 rc が付く関数は、テキスト表示背景色を指定できる。 brc が付く関数は、テキスト表示点滅背景色を指定できる。 xy が付く関数は、テキスト文字表示の開始座標を指定できる。(x >= 1, y >= 1) int rel_xy_printf(int x, int y, char *format, ...) int rel_xyc_printf(int x, int y, int c, char *format, ...) int rel_xyrc_printf(int x, int y, int c, char *format, ...) int rel_xybc_printf(int x, int y, int c, char *format, ...) int rel_xybrc_printf(int x, int y, int c, char *format, ...) int rel_xy_fprintf(int x, int y, FILE *fp, char *format, ...) int rel_xyc_fprintf(int x, int y, int c, FILE *fp, char *format, ...) int rel_xyrc_fprintf(int x, int y, int c, FILE *fp, char *format, ...) int rel_xybc_fprintf(int x, int y, int c, FILE *fp, char *format, ...) int rel_xybrc_fprintf(int x, int y, int c, FILE *fp, char *format, ...) 拡張 puts 関数 テキスト文字表示の開始座標を指定できる。(x >= 1, y >= 1) int xy_puts(int x, int y, char *str) カーソル非表示、表示設定関数。[MS-DOS 上で有効] int cursor_off(void) int cursor_on(void) ファンクションキー非表示、表示設定関数[MS-DOS 上で有効] int fk_off(void) int fk_on(void) 漢字表示モードから、セミグラフィックキャラクタ表示モードへ移行する [MS-DOS 上で有効] int graph_char_on(void) セミグラフィックキャラクタ表示モードから、漢字表示モードへ移行する [MS-DOS 上で有効] int graph_char_off(void) 行間なし 25 行モードから、行間空き 20 行モードへ移行する[MS-DOS 上で有効] int spacing_on(void) 行間空き 20 行モードから、行間なし 25 行モードへ移行する[MS-DOS 上で有効] int spacing_off(void) [End of file]