• ベストアンサー

\x1bが働きません。

\x1bが働きません。 すみません。C言語初心者でよくわかりません。 コンパイラはフリーのBorland C++ Compiler 5.5を使用してます。 OSはWindows98です。 記述は下記のとおりですが、 ------------------------------------------------------ #include <stdio.h> #include <conio.h> void main(void); void main(void) {   int i;   printf("clear\x1b[2J\n");   for(i=30;i<=37;i++){     printf("\x1b[%dmcolor\n",i);   }   getch(); } ------------------------------------------------------ DOS窓の実行画面はこのとおり。全部白文字で出力されます。 ------------------------------------------------------ clear←[2J ←[30mcolor ←[31mcolor ←[32mcolor ←[33mcolor ←[34mcolor ←[35mcolor ←[36mcolor ←[37mcolor (getchの入力待ち) ------------------------------------------------------ 実際は←の所はEnterキーに印刷されているカギ状の矢印です。 \x1bが改行マーク?に置きかえられているのです。 どなたかアドバイスお願いします。 ちなみにDOS窓の時に\が「む」キーを押さないと入力できませんが 何か関係がありますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • alfeim
  • ベストアンサー率58% (114/195)
回答No.4

申し訳ない、adddevではなくてadddrvでした(^^; それで組み込み方ですが、Windows95/98(se含む)であればWindowsのインストールされているドライブの一番上(普通はC:\です)にある、config.sysを編集します。 メモ帳などで開き、適当な個所に DEVICE=C:\WINDOWS\COMMAND\ANSI.SYS と記述します(C:\WINDOWS...の部分はそちらのシステムのANSI.SYSの場所を指定してください)。 NTや2000などの起動時にデバイスドライバをロードする機構を持たないものの場合は、adddrvを使います。ロードするデバイスをconfig.sysと同様に記述し adddrv [ロードするデバイスを記述したファイル名] として実行すればロードされるはずです。 ドライバがロードされたかどうかは MEM /D で確認できたはずです(このへん自信ないです。当時はサードパーティ製の別コマンド使っていたので) # 以下 駄文です ・・・さすがに最近はこのへんの事も必要なくなったせいで情報も見つかりにくくなってるようです。MS-DOS全盛の頃は知ってて当然に近い事だったのですが・・・ 要するにMS-DOS時代の知識ですので、大きな書店に行ってMS-DOS系の本を探せばこのへんの事について詳しく載っています。 また、adddrvの方は設定ファイルいらずのものがVectorにあったはず・・・なんですがX68000版は検索でヒットするけど、MS-DOS版は見当たらず・・・なくなったようです・・・ とおもったらadddevという同等コマンドがあった模様。参考URLにあります。これを使えば設定ファイル無しで読み込む事が出きるようです。

参考URL:
http://www.vector.co.jp/soft/dos/writing/se002001.html?l
vide
質問者

お礼

詳しい説明ありがとうございました。 さっそくWin98の例をとってconfig.sysを編集してみました。 はじめ何も変わらなかったので、あれ?と思ったのですが 「あっ再起動してない」と思って再起動したら バッチリの実行結果が表示されました。 1人ではとても解決できなかったでしょう。 本当にありがとうございました。

その他の回答 (3)

  • alfeim
  • ベストアンサー率58% (114/195)
回答No.3

たしかescape sequenceを通すためにansi.sysをロードしてやる必要があったと思います。 adddevコマンドでansi.sysをロードするか、config.sysでansi.sysを組み込んでから実行してみてください。

vide
質問者

お礼

ええと、なんか私の求めていた答えがここにある!と言う感じがしてます。 ありがたいです。 でも、言ってることが私には難しいです。 調べて見ましたらansi.sysっていうファイルはマシンの中に2つ、 config.sysというのは4つありました。必要なファイルは手元に あるという事でしょうか? 「adddevコマンドでロードする」「config.sysで組み込んでから」 …すみません。意味がわかりません。 何をしたら良いのでしょう? --------------------------------------------------------- p.s. 回答No.1に対する補足の中の3行目、 printf("\x1b35mピンク"); は、 printf("\x1b[35mピンク"); の誤りです。 million-showさん、失礼いたしました。

  • wogota
  • ベストアンサー率42% (66/154)
回答No.2

エスケープシーケンスを使って画面を消したり、色を変えようと なさっていると思いますが、DOSプロンプトでは出来なかった ような気がします。MS-DOSとかPC-DOSでは使えますが・・・ あと、「む」で「¥」が表示されるのは、お使いのキーボードを Windowsが英語版のキーボードと認識している、と思われます。

vide
質問者

お礼

そうそうエスケープシーケンス(制御文字)とかいうやつです。 有力な情報ありがとうございます。 しかし私にはさらなる疑問が… PC-DOSってはじめて聞きました。これって何ですか? あとWindows上ではキーボードは正常に動作してますが、 DOS窓とWin終了後のMS-DOSモードどちらともキーボードの認識が おっしゃるように誤認しているようです。 DOS上のキーボードの認識を改める方法ってあるんでしょうか?

回答No.1

すみません。私の日本語能力が低いので videさんが何を言わんとしているかがわからないのですが 改行をしたいのですか? 改行は \n と入力してください。 そうではなく、 \x1b と実行画面で表示させたいのなら、 \\x1b と\を2回続けて入力してください。

vide
質問者

補足

簡単に言うと私の狙いとしては、 printf("\x1b[2J"); /* 画面をクリアする */ printf("\x1b35mピンク"); /* "ピンク"という文字をピンク色で表示する */ なので期待する実行画面は ------------------------------------ ピンク(←ピンク色で) ------------------------------------ とやりたいのですが 現状ですと ------------------------------------ ←[2J←[35mピンク(←白色で) ------------------------------------ となってしまい期待通りの実行結果が得られないので どなたか良きアドバイスを!!ということです。

関連するQ&A