Last Update: Nov.1,2006

C Source Library

「LSI C-86 Ver.3.30c 試食版」、「Borland C++ 5.5」でコンパイル出来ます。

■ 文字の前景色・背景色を変更

/*
 *  文字の前景色・背景色を変更
 *  (エスケープ文字を使う)
 *
 *      1999/??/??  初版
 *      2001/01/10  ここまで何回か修正
 *      2006/11/01  大幅に書き直し
 *
 */

#include <conio.h>

#ifdef LSI_C

/* カラー定数 */
enum COLORS {
    BLACK, RED, GREEN, BROWN,
    BLUE, MAGENTA, CYAN, LIGHTGRAY,
    DARKGRAY, LIGHTRED, LIGHTGREEN, YELLOW,
    LIGHTBLUE, LIGHTMAGENTA, LIGHTCYAN, WHITE
};

/* 画面消去 */
void clrscr(void)
{
    cprintf("\x1b[2J");
}

/* カーソル位置移動 */
void gotoxy(int x, int y)
{
    cprintf("\x1b[%d;%dH", y, x);
}

/* 表示色設定 */
void textattr(int c)
{
    int fc = (c & 0x7) + 30;
    int bc = (c >> 4 & 0x7) + 40;
    cprintf("\x1b[0m");
    if (c & 0x8) cprintf("\x1b[1m");
    if (c & 0x80) cprintf("\x1b[5m");
    cprintf("\x1b[%d;%dm", fc, bc);
}

#endif

/* テスト */
int main()
{
    int i, j, k;
    int colors[] = {
        BLACK, BLUE, GREEN, CYAN,
        RED, MAGENTA, BROWN, LIGHTGRAY,
        DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN,
        LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE
    };

    clrscr();
    for (j = 0; j < 16; j++) {
        for (i = 0; i < 16; i++) {
            gotoxy(i * 4 + 1, j + 1);
            k = colors[j] | colors[i] << 4;
            textattr(k);
            cprintf("[%02x]", k);
        }
    }
    textattr(WHITE | BLACK << 4);

    return 0;
}