#define CLS() fprintf(stderr,"\x1b[2J") /* Noリダイレクト */
#define LOCATE(x,y) fprintf(stderr,"\x1b[%d;%dH",((y)+1),((x)+1)) /* (0-79,0-24) */
#define COLOR(c) fprintf(stderr,"\x1b[%dm",(c)+30) /* 0:黒,1:赤,2:緑,3:黄,4:青,5:紫,6:水,7:白.(+10:反転) */
#define INKEY_S() (bdos(6,0xff,0) & 0xff) /* dos.hが必要 */
#define mpeek(seg,off) (*(char far *)(((unsigned long)seg<<16)+off)) /* POS_0, CSRLIN で使用 */
#define POS_0() (mpeek(0x0060,0x011c)) /* カーソル列取得 98メモリ直接読取り */
#define CSRLIN() (mpeek(0x0060,0x0110)-mpeek(0x0060,0x011e)) /* カーソル行取得 */
LOCATE()とCLS()の例をお見せします。
#define LOCATE(x,y) gotoxy( (x)+1, (y)+1 ) /* conio.hが必要 */ #define CLS() system( "cls" ) /* stdlib.hが必要 */ /* 以下はBorland C++ 5.5.1 for Win32で「bcc32 a.cpp」のようにコンパイル&リンクして動作確認した使用例 */ #include <conio.h> #include <stdio.h> #include <stdlib.h> void main( void ) { system( "mode CON COLS=80 LINES=25" ); CLS(); LOCATE( 1,1 ); printf( "*" ); LOCATE( 2,2 ); printf( "*" ); LOCATE( 3,3 ); printf( "*" ); LOCATE( 4,3 ); printf( "*" ); LOCATE( 4,3 ); printf( "*" ); LOCATE( 5,3 ); printf( "*" ); LOCATE( 5,4 ); printf( "*" ); LOCATE( 5,5 ); printf( "*" ); getch(); }
上のCLS()マクロは、ほぼ全てのDOSとWindowsのDOS窓及びそれら用のC/C++コンパイラの環境で使えると思います。
LOCATE()マクロは、Borland系のC/C++コンパイラの環境でDOSとWindowsのDOS窓に互換性がある筈です。
LOCATE()マクロについて、WindowsのDOS窓にスクロールバーが表示されるような状況では期待と違う動きをするかも知れません。
予めDOS窓のプロパティで、バッファサイズとウインドウサイズを80x25などの無難な大きさで揃えておくなどすると良いと思います。
DOS窓のプロパティを手動で設定する代わりに、main()関数の冒頭などで「system( "mode CON COLS=80 LINES=25" );」をコーディングしておくのでも良いと思います。
カテゴリに「ネタ・ジョーク」とあり・質問文面でも「部分回答でもよい」と言って頂いているのに甘えて、ごく一部分だけの中途半端な回答をさせて頂きました。
rsc96074さんがもしFreeCommandLineToolsとして公開されている無償版のbcc32コンパイラをお使いなら、ライブラリヘルプが付属していないことが主なご不便なのだろうと思います。登録は必要ですが、BCB6 Japanese Help Contentをダウンロードしてみては如何でしょうか? バージョンは異なりますが、充分に役立つと思います。
rsc96074さんであれば、上のヘルプを見たほうが手っ取り早いのだろうと思います。ダウンロードした場合は目も眩むほどのヘルプファイルが得られますが、取り敢えずは~/Japanese/Help/bcb6.hlp辺りを開けば便利と思います。
DOS窓アプリでやろうとしているなら、いずれも無理
アプリというよりコンソールプログラムです。ちなみに、自分でも検索していますが、CLS()とLOCATE(x,y)は、なんとかなりそうです。ヒントは、Borland C++では、Turbo Cの関数が使えるようです。(^_^;
LOCATE()とCLS()の例をお見せします。
#define LOCATE(x,y) gotoxy( (x)+1, (y)+1 ) /* conio.hが必要 */ #define CLS() system( "cls" ) /* stdlib.hが必要 */ /* 以下はBorland C++ 5.5.1 for Win32で「bcc32 a.cpp」のようにコンパイル&リンクして動作確認した使用例 */ #include <conio.h> #include <stdio.h> #include <stdlib.h> void main( void ) { system( "mode CON COLS=80 LINES=25" ); CLS(); LOCATE( 1,1 ); printf( "*" ); LOCATE( 2,2 ); printf( "*" ); LOCATE( 3,3 ); printf( "*" ); LOCATE( 4,3 ); printf( "*" ); LOCATE( 4,3 ); printf( "*" ); LOCATE( 5,3 ); printf( "*" ); LOCATE( 5,4 ); printf( "*" ); LOCATE( 5,5 ); printf( "*" ); getch(); }
上のCLS()マクロは、ほぼ全てのDOSとWindowsのDOS窓及びそれら用のC/C++コンパイラの環境で使えると思います。
LOCATE()マクロは、Borland系のC/C++コンパイラの環境でDOSとWindowsのDOS窓に互換性がある筈です。
LOCATE()マクロについて、WindowsのDOS窓にスクロールバーが表示されるような状況では期待と違う動きをするかも知れません。
予めDOS窓のプロパティで、バッファサイズとウインドウサイズを80x25などの無難な大きさで揃えておくなどすると良いと思います。
DOS窓のプロパティを手動で設定する代わりに、main()関数の冒頭などで「system( "mode CON COLS=80 LINES=25" );」をコーディングしておくのでも良いと思います。
カテゴリに「ネタ・ジョーク」とあり・質問文面でも「部分回答でもよい」と言って頂いているのに甘えて、ごく一部分だけの中途半端な回答をさせて頂きました。
rsc96074さんがもしFreeCommandLineToolsとして公開されている無償版のbcc32コンパイラをお使いなら、ライブラリヘルプが付属していないことが主なご不便なのだろうと思います。登録は必要ですが、BCB6 Japanese Help Contentをダウンロードしてみては如何でしょうか? バージョンは異なりますが、充分に役立つと思います。
rsc96074さんであれば、上のヘルプを見たほうが手っ取り早いのだろうと思います。ダウンロードした場合は目も眩むほどのヘルプファイルが得られますが、取り敢えずは~/Japanese/Help/bcb6.hlp辺りを開けば便利と思います。
回答ありがとうございます。LOCATEは私の考えたのと同じでした。CLSは、その方法は思いつきませんでした。私の質問は頭の体操の一面もあるので凝った回答大歓迎です。
ちなみに、私の考えたというか、見つけたのは、CLSの場合、clrscr()関数で代用するものです。COLORもtextcolor(c)という関数がありましたが、実際に試してみましたが、エラーにはなりませんでしたが、色は変わりませんでした。(^_^;
回答ありがとうございます。LOCATEは私の考えたのと同じでした。CLSは、その方法は思いつきませんでした。私の質問は頭の体操の一面もあるので凝った回答大歓迎です。
ちなみに、私の考えたというか、見つけたのは、CLSの場合、clrscr()関数で代用するものです。COLORもtextcolor(c)という関数がありましたが、実際に試してみましたが、エラーにはなりませんでしたが、色は変わりませんでした。(^_^;