制御コード | 動作 |
ESC [0J | カーソル位置から、画面の最後までを消す |
ESC [1J | 画面の最初の位置から、カーソルまで消す |
ESC [2J | 全部消す |
ESC [0K | カーソルからその行の終わりまでを消す |
ESC [1K | その行の最初からカーソルまでを消す |
ESC [2K | カーソルのある行を消す |
制御コード | 動作 |
ESC [>1l | 一番下の行にファンクションキー表示 |
ESC [>1h | 一番下の行もアプリで使う!! |
ESC [>3l | 25行モード |
ESC [>3h | 20行モード |
ESC [>5l | カーソル表示 |
ESC [>5h | カーソル非表示 |
まず、いちいちprintf("\x1b何タラ、カンタラ");などと書くのは 面倒くさいですね。これをもう少し楽をして実現する方法を 考えてみましょう。
(1)#defineを使ってもっと簡単なコマンド風にする
(2)関数を作っちゃう。
(3)上の2つの組み合わせ
などか考えられます。
というように使います。引数がなければ文字列のカッコは不要です。 たとえば、#define マクロ名(引数,・・・) (文字列)
なんてのは、よく入門書に出ていますね。円周率を頻繁に使うプログラムでは 円周率の所にいちいち3.14....何て書くのはだるいし、まちがいのもとです。 これで、(1)については、わかりましたね。 プログラムの最初に、#define PAI 3.14
#define CLS printf("\x1b[2J")
と書いておけば、プログラム中でCLS;とすれば画面が
消去されます。
#defineは単に、文字の置き換えをするだけです。 ですから、
#define CLS printf("...");
とするとmain関数中でCLS(セミコロンなし)と書くだけで
printf("....");
が実行されます。
あんまり、調子に乗ってdefineを多用するとかえってわかりにくく
なるのでほどほどに使いましょう。(中庸の徳?)
さて、次は関数にしてしまいましょう。たとえば
printf()の表示をBASIC風にLOCATE(X,Y);などと
任意の位置に表示できれば便利ですね。
このプログラムは、順番に見ていけばわかると思います。 練習のために、マクロと関数をごちゃごちゃに使っています。 実際は、こんな変な使い方はやめましょう。 それと、使えそうなエスケープ・シーケンスを全部 マクロにして、これを*****.hというヘッダーファイルにしてしまいます。 そして、自分のプログラムの最初の所に
#include "*****.h"
と入れると、何だかプログラムがうまくなったような 気になれます。
このプログラムを実行すると下の図のようになります。
あとは、文字に色を付けたり、
アンダーラインを引いたりする関数にも挑戦してください。
Update Nov/21/1996 By Y.Kumei