1/* Test for the term-ostream API. */ 2 3#include <config.h> 4 5#include "term-ostream.h" 6 7#include <stdlib.h> 8#include <string.h> 9 10int 11main () 12{ 13 static struct { const char *name; term_color_t c; int r; int g; int b; } 14 colors[] = 15 { 16 { "black", -2, 0, 0, 0 }, 17 { "blue", -2, 0, 0, 255 }, 18 { "green", -2, 0, 255, 0 }, 19 { "cyan", -2, 0, 255, 255 }, 20 { "red", -2, 255, 0, 0 }, 21 { "magenta", -2, 255, 0, 255 }, 22 { "yellow", -2, 255, 255, 0 }, 23 { "white", -2, 255, 255, 255 }, 24 { "default", COLOR_DEFAULT } 25 }; 26 term_ostream_t stream; 27 int i, row, col; 28 29 stream = term_ostream_create (1, "stdout"); 30 31 for (i = 0; i < 8; i++) 32 colors[i].c = 33 term_ostream_rgb_to_color (stream, colors[i].r, colors[i].g, colors[i].b); 34 35 ostream_write_str (stream, "Colors (foreground/background):\n"); 36 ostream_write_str (stream, " "); 37 for (col = 0; col <= 8; col++) 38 { 39 const char *name = colors[col].name; 40 ostream_write_str (stream, "|"); 41 ostream_write_str (stream, name); 42 ostream_write_mem (stream, " ", 7 - strlen (name)); 43 } 44 ostream_write_str (stream, "\n"); 45 for (row = 0; row <= 8; row++) 46 { 47 const char *name = colors[row].name; 48 ostream_write_str (stream, name); 49 ostream_write_mem (stream, " ", 7 - strlen (name)); 50 for (col = 0; col <= 8; col++) 51 { 52 term_color_t row_color = colors[row].c; 53 term_color_t col_color = colors[col].c; 54 55 ostream_write_str (stream, "|"); 56 term_ostream_set_color (stream, row_color); 57 term_ostream_set_bgcolor (stream, col_color); 58 if (!(term_ostream_get_color (stream) == row_color 59 && term_ostream_get_bgcolor (stream) == col_color)) 60 abort (); 61 ostream_write_str (stream, " Words "); 62 term_ostream_set_color (stream, COLOR_DEFAULT); 63 term_ostream_set_bgcolor (stream, COLOR_DEFAULT); 64 if (!(term_ostream_get_color (stream) == COLOR_DEFAULT 65 && term_ostream_get_bgcolor (stream) == COLOR_DEFAULT)) 66 abort (); 67 } 68 ostream_write_str (stream, "\n"); 69 } 70 ostream_write_str (stream, "\n"); 71 72 ostream_write_str (stream, "Colors (hue/saturation):\n"); 73 /* Hue from 0 to 1. */ 74 for (row = 0; row <= 17; row++) 75 { 76 for (col = 0; col <= 64; col++) 77 { 78 int r = 255; 79 int b = (int) (255.0f / 64.0f * col + 0.5f); 80 int g = b + (int) (row / 17.0f * (r - b) + 0.5f); 81 term_color_t c = term_ostream_rgb_to_color (stream, r, g, b); 82 term_ostream_set_bgcolor (stream, c); 83 ostream_write_str (stream, " "); 84 term_ostream_set_bgcolor (stream, COLOR_DEFAULT); 85 } 86 ostream_write_str (stream, "\n"); 87 } 88 /* Hue from 1 to 2. */ 89 for (row = 17; row >= 0; row--) 90 { 91 for (col = 0; col <= 64; col++) 92 { 93 int g = 255; 94 int b = (int) (255.0f / 64.0f * col + 0.5f); 95 int r = b + (int) (row / 17.0f * (g - b) + 0.5f); 96 term_color_t c = term_ostream_rgb_to_color (stream, r, g, b); 97 term_ostream_set_bgcolor (stream, c); 98 ostream_write_str (stream, " "); 99 term_ostream_set_bgcolor (stream, COLOR_DEFAULT); 100 } 101 ostream_write_str (stream, "\n"); 102 } 103 /* Hue from 2 to 3. */ 104 for (row = 0; row <= 17; row++) 105 { 106 for (col = 0; col <= 64; col++) 107 { 108 int g = 255; 109 int r = (int) (255.0f / 64.0f * col + 0.5f); 110 int b = r + (int) (row / 17.0f * (g - r) + 0.5f); 111 term_color_t c = term_ostream_rgb_to_color (stream, r, g, b); 112 term_ostream_set_bgcolor (stream, c); 113 ostream_write_str (stream, " "); 114 term_ostream_set_bgcolor (stream, COLOR_DEFAULT); 115 } 116 ostream_write_str (stream, "\n"); 117 } 118 /* Hue from 3 to 4. */ 119 for (row = 17; row >= 0; row--) 120 { 121 for (col = 0; col <= 64; col++) 122 { 123 int b = 255; 124 int r = (int) (255.0f / 64.0f * col + 0.5f); 125 int g = r + (int) (row / 17.0f * (b - r) + 0.5f); 126 term_color_t c = term_ostream_rgb_to_color (stream, r, g, b); 127 term_ostream_set_bgcolor (stream, c); 128 ostream_write_str (stream, " "); 129 term_ostream_set_bgcolor (stream, COLOR_DEFAULT); 130 } 131 ostream_write_str (stream, "\n"); 132 } 133 /* Hue from 4 to 5. */ 134 for (row = 0; row <= 17; row++) 135 { 136 for (col = 0; col <= 64; col++) 137 { 138 int b = 255; 139 int g = (int) (255.0f / 64.0f * col + 0.5f); 140 int r = g + (int) (row / 17.0f * (b - g) + 0.5f); 141 term_color_t c = term_ostream_rgb_to_color (stream, r, g, b); 142 term_ostream_set_bgcolor (stream, c); 143 ostream_write_str (stream, " "); 144 term_ostream_set_bgcolor (stream, COLOR_DEFAULT); 145 } 146 ostream_write_str (stream, "\n"); 147 } 148 /* Hue from 5 to 6. */ 149 for (row = 17; row >= 0; row--) 150 { 151 for (col = 0; col <= 64; col++) 152 { 153 int r = 255; 154 int g = (int) (255.0f / 64.0f * col + 0.5f); 155 int b = g + (int) (row / 17.0f * (r - g) + 0.5f); 156 term_color_t c = term_ostream_rgb_to_color (stream, r, g, b); 157 term_ostream_set_bgcolor (stream, c); 158 ostream_write_str (stream, " "); 159 term_ostream_set_bgcolor (stream, COLOR_DEFAULT); 160 } 161 ostream_write_str (stream, "\n"); 162 } 163 ostream_write_str (stream, "\n"); 164 165 ostream_write_str (stream, "Weights:\n"); 166 term_ostream_set_weight (stream, WEIGHT_NORMAL); 167 if (term_ostream_get_weight (stream) != WEIGHT_NORMAL) 168 abort (); 169 ostream_write_str (stream, "normal, "); 170 term_ostream_set_weight (stream, WEIGHT_BOLD); 171 if (term_ostream_get_weight (stream) != WEIGHT_BOLD) 172 abort (); 173 ostream_write_str (stream, "bold, "); 174 term_ostream_set_weight (stream, WEIGHT_DEFAULT); 175 if (term_ostream_get_weight (stream) != WEIGHT_DEFAULT) 176 abort (); 177 ostream_write_str (stream, "default \n"); 178 ostream_write_str (stream, "\n"); 179 180 ostream_write_str (stream, "Postures:\n"); 181 term_ostream_set_posture (stream, POSTURE_NORMAL); 182 if (term_ostream_get_posture (stream) != POSTURE_NORMAL) 183 abort (); 184 ostream_write_str (stream, "normal, "); 185 term_ostream_set_posture (stream, POSTURE_ITALIC); 186 if (term_ostream_get_posture (stream) != POSTURE_ITALIC) 187 abort (); 188 ostream_write_str (stream, "italic, "); 189 term_ostream_set_posture (stream, POSTURE_DEFAULT); 190 if (term_ostream_get_posture (stream) != POSTURE_DEFAULT) 191 abort (); 192 ostream_write_str (stream, "default \n"); 193 ostream_write_str (stream, "\n"); 194 195 ostream_write_str (stream, "Text decorations:\n"); 196 term_ostream_set_underline (stream, UNDERLINE_OFF); 197 if (term_ostream_get_underline (stream) != UNDERLINE_OFF) 198 abort (); 199 ostream_write_str (stream, "normal, "); 200 term_ostream_set_underline (stream, UNDERLINE_ON); 201 if (term_ostream_get_underline (stream) != UNDERLINE_ON) 202 abort (); 203 ostream_write_str (stream, "underlined, "); 204 term_ostream_set_underline (stream, UNDERLINE_DEFAULT); 205 if (term_ostream_get_underline (stream) != UNDERLINE_DEFAULT) 206 abort (); 207 ostream_write_str (stream, "default \n"); 208 ostream_write_str (stream, "\n"); 209 210 ostream_free (stream); 211 212 return 0; 213} 214