WindowsNT 以降の32BitのWindows ではいわゆるDOS窓、すなわちコマンドプロンプト では、エスケープシーケンス 【G 】をサポートしていませんね。
身近で(学生さんが)Cのプログラム でシェル(DOS窓 )場の文字 をエスケープシーケンスで色を変えたいんですけど・・という相談がありました。いろいろ情報 もあるのですが、大事な部分が抜けています。
Windows側では、16ビット のプログラムを起動する前には必ず仮想DOS 上のドライバー 等の組み込み を行う仕組みなんですがこれが、
1.DOSプログラムの場合 -> C:¥SysemRoot¥System32¥CONFIG.NT |C#V| AUTOEXEC.NT
2.Windowsプログラムは -> C:¥SysemRoot¥System32¥CONFIG.WOW |C#V| AUTOEXEC.NT
となります。
ですから、DOSプログラムを処理する場合には、CONFIG.NT にはNECのPC9801 と違って、ansi.sysを組み込んでやる必要があります。
ファイル の最後の方に・・
device=%SystemRoot%¥system32¥ANSI .SYS
dosonly
を入れましょう。
ここからが大事なんですが、16ビットのDOSプログラムを起動すると自動的に認識してくれますが、Cコンパイラ が32ビット の場合には、DOS窓(command.com)ではなくて、CMD.EXE が起動されるでしょう。
したがって、明示的 にCOMMAND.COM を起動した方が確実です。
このDOS窓から、コマンドライン でプログラムを起動するとエスケープシーケンスが効いているはずです。ためしに次のコマンド を入力 して見て ください。
PROMPT=[$p]% $e[33m
DIR
これで、プロンプトの色等が変化していればOKです。
注意 ですが、command.com は16ビット用ですから通常 の終了をするとかなりWindowsのほうで処理を考え込んでしまいます。笑
これを終了するときにもコマンドライン上から、EXIT で抜けてください。ここが肝心です。:P
スポンサードリンク