mirror of
https://github.com/radareorg/radare2.git
synced 2025-02-08 23:07:17 +00:00
Made the "ec" command family 24bit-aware.
This commit is contained in:
parent
14a775f14f
commit
5559f3ba7e
@ -100,10 +100,11 @@ struct {
|
||||
{ NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
static inline ut8 rgbnum (const char ch) {
|
||||
static inline ut8 rgbnum (const char ch1, const char ch2) {
|
||||
ut8 r = 0;
|
||||
r_hex_to_byte (&r, ch);
|
||||
return r*16;
|
||||
r_hex_to_byte (&r, ch1);
|
||||
r_hex_to_byte (&r, ch2);
|
||||
return r;
|
||||
}
|
||||
|
||||
R_API void r_cons_pal_random() {
|
||||
@ -116,10 +117,10 @@ R_API void r_cons_pal_random() {
|
||||
k = r_cons_pal_get_i (i);
|
||||
if (!k) break;
|
||||
if (cons->truecolor>0) {
|
||||
r = r_num_rand (0xf);
|
||||
g = r_num_rand (0xf);
|
||||
b = r_num_rand (0xf);
|
||||
sprintf (val, "rgb:%x%x%x", r, g, b);
|
||||
r = r_num_rand (0xff);
|
||||
g = r_num_rand (0xff);
|
||||
b = r_num_rand (0xff);
|
||||
sprintf (val, "rgb:%02x%02x%02x", r, g, b);
|
||||
r_cons_pal_set (k, val);
|
||||
} else {
|
||||
char *s = r_cons_color_random_string (0);
|
||||
@ -151,16 +152,30 @@ R_API char *r_cons_pal_parse(const char *str) {
|
||||
return r_cons_color_random (0);
|
||||
}
|
||||
if (!strncmp (s, "rgb:", 4)) {
|
||||
r = rgbnum (s[4]);
|
||||
g = rgbnum (s[5]);
|
||||
b = rgbnum (s[6]);
|
||||
r_cons_rgb_str (out, r, g, b, 0);
|
||||
if (strlen(s) == 7) {
|
||||
r = rgbnum (s[4], '0');
|
||||
g = rgbnum (s[5], '0');
|
||||
b = rgbnum (s[6], '0');
|
||||
r_cons_rgb_str (out, r, g, b, 0);
|
||||
} else if (strlen(s) == 10) {
|
||||
r = rgbnum (s[4], s[5]);
|
||||
g = rgbnum (s[6], s[7]);
|
||||
b = rgbnum (s[8], s[9]);
|
||||
r_cons_rgb_str (out, r, g, b, 0);
|
||||
}
|
||||
}
|
||||
if (p && !strncmp (p, "rgb:", 4)) {
|
||||
r = rgbnum (p[4]);
|
||||
g = rgbnum (p[5]);
|
||||
b = rgbnum (p[6]);
|
||||
r_cons_rgb_str (out+strlen (out), r, g, b, 1);
|
||||
if (strlen(s) == 7) {
|
||||
r = rgbnum (p[4], '0');
|
||||
g = rgbnum (p[5], '0');
|
||||
b = rgbnum (p[6], '0');
|
||||
r_cons_rgb_str (out, r, g, b, 0);
|
||||
} else if (strlen(s) == 10) {
|
||||
r = rgbnum (p[4], p[5]);
|
||||
g = rgbnum (p[6], p[7]);
|
||||
b = rgbnum (p[8], p[9]);
|
||||
r_cons_rgb_str (out, r, g, b, 0);
|
||||
}
|
||||
}
|
||||
for (i=0; colors[i].name; i++) {
|
||||
if (!strcmp (s, colors[i].name))
|
||||
@ -346,11 +361,8 @@ R_API void r_cons_pal_list (int rad) {
|
||||
r_cons_rgb_parse (*color, &r, &g, &b, NULL);
|
||||
rgbstr[0] = 0;
|
||||
r_cons_rgb_str (rgbstr, r, g, b, 0);
|
||||
r >>= 4;
|
||||
g >>= 4;
|
||||
b >>= 4;
|
||||
r_cons_printf ("ec %s rgb:%x%x%x\n",
|
||||
keys[i].name, r&0xf, g&0xf, b&0xf);
|
||||
r_cons_printf ("ec %s rgb:%02x%02x%02x\n",
|
||||
keys[i].name, r, g, b);
|
||||
break;
|
||||
default:
|
||||
r_cons_printf (" %s##"Color_RESET" %s\n", *color, keys[i].name);
|
||||
|
@ -37,16 +37,22 @@ static void init_color_table() {
|
||||
}
|
||||
}
|
||||
|
||||
static int gs (int rgb) {
|
||||
return 232 + (double)rgb/(255/24.1);
|
||||
static int lookup_rgb (int r, int g, int b) {
|
||||
int i;
|
||||
|
||||
int color = (r << 16) + (g << 8) + b;
|
||||
for (i = 0; i < 256; ++i)
|
||||
if (color_table[i] == color) return i;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int rgb(int r, int g, int b) {
|
||||
static int approximate_rgb (int r, int g, int b) {
|
||||
const double k = (256.0/6.0);
|
||||
int grey = 0;
|
||||
if (r > 0 && r < 255 && r == g && r == b) grey = 1;
|
||||
if (grey > 0) {
|
||||
return gs(r);
|
||||
return 232 + (double)r/(255/24.1);
|
||||
} else {
|
||||
r = R_DIM (r/k, 0, 6);
|
||||
g = R_DIM (g/k, 0, 6);
|
||||
@ -55,6 +61,12 @@ static int rgb(int r, int g, int b) {
|
||||
}
|
||||
}
|
||||
|
||||
static int rgb (int r, int g, int b) {
|
||||
int c = lookup_rgb(r, g, b);
|
||||
if (c == -1) return approximate_rgb(r, g, b);
|
||||
else return c;
|
||||
}
|
||||
|
||||
static void unrgb(int color, int *r, int *g, int *b) {
|
||||
if (color_table[255] == 0) init_color_table();
|
||||
int rgb = color_table[color];
|
||||
@ -132,18 +144,15 @@ R_API int r_cons_rgb_parse (const char *p, ut8 *r, ut8 *g, ut8 *b, int *is_bg) {
|
||||
}
|
||||
|
||||
R_API char *r_cons_rgb_str (char *outstr, ut8 r, ut8 g, ut8 b, int is_bg) {
|
||||
int k, fgbg = is_bg? 48: 38;
|
||||
k = (r == g && g == b)? gs (r): rgb (r, g, b);
|
||||
//k = rgb (r, g, b);
|
||||
int fgbg = is_bg? 48: 38;
|
||||
if (!outstr) outstr = malloc (32);
|
||||
|
||||
switch (r_cons_singleton()->truecolor) {
|
||||
case 1: // 256 color palette
|
||||
sprintf (outstr, "\x1b[%d;5;%dm", fgbg, k);
|
||||
sprintf (outstr, "\x1b[%d;5;%dm", fgbg, rgb(r, g, b));
|
||||
break;
|
||||
case 2: // 16M - xterm only
|
||||
sprintf (outstr, "\x1b[%d;2;%d;%d;%dm", fgbg,
|
||||
r&0xff, g&0xff, b&0xff);
|
||||
sprintf (outstr, "\x1b[%d;2;%d;%d;%dm", fgbg, r, g, b);
|
||||
break;
|
||||
case 0: // ansi 16 colors
|
||||
default:
|
||||
|
Loading…
x
Reference in New Issue
Block a user