void truecolor_create_tables(void) { pixel_t *table; pixel_t pixel; u32 i; /* Truecolor */ CREATE_COMPONENT_TABLE(red, red); CREATE_COMPONENT_TABLE(green, green); CREATE_COMPONENT_TABLE(blue, blue); CREATE_COMPONENT_TABLE(alpha, transp); /* Grayscale */ gray_bits = min(min(red_bits, green_bits), blue_bits); gray_len = 1<<gray_bits; table = malloc(gray_len*sizeof(pixel_t)); for (i = 0; i < gray_len; i++) { pixel = rgb_pixel(CONVERT_RANGE(i, gray_len-1, red_len-1), CONVERT_RANGE(i, gray_len-1, green_len-1), CONVERT_RANGE(i, gray_len-1, blue_len-1)); table[i] = pixel; } gray_pixel = table; /* Monochrome */ black_pixel = rgb_pixel(0, 0, 0); white_pixel = rgb_pixel(red_len-1, green_len-1, blue_len-1); /* Pseudocolor emulation */ idx_bits = min(red_bits+green_bits+blue_bits, 9); idx_len = 1<<idx_bits; idx_pixel = truecolor_idx_pixel = malloc(idx_len*sizeof(pixel_t)); clut = malloc(idx_len*sizeof(rgba_t)); clut_init_nice(); }
/* 初期化 */ static inline void init_bn(void) { if (initscr() == NULL){ fprintf(stderr, "initscr failure\n"); exit(EXIT_FAILURE); } /* 端末が色の使用と変更が可能なら設定 */ start_color(); /* 色の初期化 */ /* 色番号(1 ~ COLORSの間とする) r, g, b, それぞれ0~1000の範囲 */ init_color(BN_COLOR_RED, CONVERT_RANGE(215), CONVERT_RANGE(0), CONVERT_RANGE(58)); init_color(BN_COLOR_GREEN, CONVERT_RANGE(56), CONVERT_RANGE(180), CONVERT_RANGE(139)); init_color(BN_COLOR_BLUE, CONVERT_RANGE(44), CONVERT_RANGE(169), CONVERT_RANGE(225)); init_color(BN_COLOR_BLACK, CONVERT_RANGE(43), CONVERT_RANGE(43), CONVERT_RANGE(43)); /* 前景と背景のペアを作成 */ /* 色番号(1 ~ COLOR_PAIRS-1の範囲であること) 前景 背景 */ init_pair(BN_COLOR_PAIR_WG, COLOR_WHITE, BN_COLOR_BLACK); init_pair(BN_COLOR_PAIR_BG, BN_COLOR_BLUE, BN_COLOR_BLACK); init_pair(BN_COLOR_PAIR_GG, BN_COLOR_GREEN, BN_COLOR_BLACK); if (SIG_ERR == signal(SIGQUIT, signal_handler)) { fprintf(stderr, "setting signal handler failure\n"); endwin(); exit(EXIT_FAILURE); } /* シグナルを無視する */ signal(SIGINT, SIG_IGN); /* キー入力された文字を表示しない */ noecho(); /* カーソルを表示しない */ leaveok(stdscr, TRUE); /* スクロールしない */ scrollok(stdscr, FALSE); /* カーソルを非表示に */ curs_set(0); timeout(0); keypad(stdscr, TRUE); }