mirror of
https://github.com/tmux/tmux.git
synced 2025-09-02 05:21:10 +00:00
Instead of representing colours in several different forms with various
cell flags, convert to use an int with flags marking 256 or RGB colours in the top byte (except in cells, which we don't want to make any bigger). From Brad Town.
This commit is contained in:
41
colour.c
41
colour.c
@ -67,7 +67,7 @@ colour_find_rgb(u_char r, u_char g, u_char b)
|
|||||||
|
|
||||||
/* If we have hit the colour exactly, return early. */
|
/* If we have hit the colour exactly, return early. */
|
||||||
if (cr == r && cg == g && cb == b)
|
if (cr == r && cg == g && cb == b)
|
||||||
return (16 + (36 * qr) + (6 * qg) + qb);
|
return ((16 + (36 * qr) + (6 * qg) + qb) | COLOUR_FLAG_256);
|
||||||
|
|
||||||
/* Work out the closest grey (average of RGB). */
|
/* Work out the closest grey (average of RGB). */
|
||||||
grey_avg = (r + g + b) / 3;
|
grey_avg = (r + g + b) / 3;
|
||||||
@ -83,25 +83,25 @@ colour_find_rgb(u_char r, u_char g, u_char b)
|
|||||||
idx = 232 + grey_idx;
|
idx = 232 + grey_idx;
|
||||||
else
|
else
|
||||||
idx = 16 + (36 * qr) + (6 * qg) + qb;
|
idx = 16 + (36 * qr) + (6 * qg) + qb;
|
||||||
return (idx);
|
return (idx | COLOUR_FLAG_256);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set grid cell foreground colour. */
|
/* Join RGB into a colour. */
|
||||||
void
|
int
|
||||||
colour_set_fg(struct grid_cell *gc, int c)
|
colour_join_rgb(u_char r, u_char g, u_char b)
|
||||||
{
|
{
|
||||||
if (c & 0x100)
|
return ((((int)((r) & 0xff)) << 16) |
|
||||||
gc->flags |= GRID_FLAG_FG256;
|
(((int)((g) & 0xff)) << 8) |
|
||||||
gc->fg = c;
|
(((int)((b) & 0xff))) | COLOUR_FLAG_RGB);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set grid cell background colour. */
|
/* Split colour into RGB. */
|
||||||
void
|
void
|
||||||
colour_set_bg(struct grid_cell *gc, int c)
|
colour_split_rgb(int c, u_char *r, u_char *g, u_char *b)
|
||||||
{
|
{
|
||||||
if (c & 0x100)
|
*r = (c >> 16) & 0xff;
|
||||||
gc->flags |= GRID_FLAG_BG256;
|
*g = (c >> 8) & 0xff;
|
||||||
gc->bg = c;
|
*b = c & 0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Convert colour to a string. */
|
/* Convert colour to a string. */
|
||||||
@ -109,9 +109,16 @@ const char *
|
|||||||
colour_tostring(int c)
|
colour_tostring(int c)
|
||||||
{
|
{
|
||||||
static char s[32];
|
static char s[32];
|
||||||
|
u_char r, g, b;
|
||||||
|
|
||||||
if (c & 0x100) {
|
if (c & COLOUR_FLAG_RGB) {
|
||||||
xsnprintf(s, sizeof s, "colour%d", c & ~0x100);
|
colour_split_rgb(c, &r, &g, &b);
|
||||||
|
xsnprintf(s, sizeof s, "#%02x%02x%02x", r, g, b);
|
||||||
|
return (s);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (c & COLOUR_FLAG_256) {
|
||||||
|
xsnprintf(s, sizeof s, "colour%u", c & 0xff);
|
||||||
return (s);
|
return (s);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -171,14 +178,14 @@ colour_fromstring(const char *s)
|
|||||||
n = sscanf(s + 1, "%2hhx%2hhx%2hhx", &r, &g, &b);
|
n = sscanf(s + 1, "%2hhx%2hhx%2hhx", &r, &g, &b);
|
||||||
if (n != 3)
|
if (n != 3)
|
||||||
return (-1);
|
return (-1);
|
||||||
return (colour_find_rgb(r, g, b) | 0x100);
|
return (colour_join_rgb(r, g, b));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strncasecmp(s, "colour", (sizeof "colour") - 1) == 0) {
|
if (strncasecmp(s, "colour", (sizeof "colour") - 1) == 0) {
|
||||||
n = strtonum(s + (sizeof "colour") - 1, 0, 255, &errstr);
|
n = strtonum(s + (sizeof "colour") - 1, 0, 255, &errstr);
|
||||||
if (errstr != NULL)
|
if (errstr != NULL)
|
||||||
return (-1);
|
return (-1);
|
||||||
return (n | 0x100);
|
return (n | COLOUR_FLAG_256);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcasecmp(s, "black") == 0 || strcmp(s, "0") == 0)
|
if (strcasecmp(s, "black") == 0 || strcmp(s, "0") == 0)
|
||||||
|
43
input.c
43
input.c
@ -1628,23 +1628,15 @@ input_csi_dispatch_sgr_256(struct input_ctx *ictx, int fgbg, u_int *i)
|
|||||||
(*i)++;
|
(*i)++;
|
||||||
c = input_get(ictx, *i, 0, -1);
|
c = input_get(ictx, *i, 0, -1);
|
||||||
if (c == -1) {
|
if (c == -1) {
|
||||||
if (fgbg == 38) {
|
if (fgbg == 38)
|
||||||
gc->flags &= ~(GRID_FLAG_FG256|GRID_FLAG_FGRGB);
|
|
||||||
gc->fg = 8;
|
gc->fg = 8;
|
||||||
} else if (fgbg == 48) {
|
else if (fgbg == 48)
|
||||||
gc->flags &= ~(GRID_FLAG_BG256|GRID_FLAG_BGRGB);
|
|
||||||
gc->bg = 8;
|
gc->bg = 8;
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (fgbg == 38) {
|
if (fgbg == 38)
|
||||||
gc->flags |= GRID_FLAG_FG256;
|
gc->fg = c | COLOUR_FLAG_256;
|
||||||
gc->flags &= ~GRID_FLAG_FGRGB;
|
else if (fgbg == 48)
|
||||||
gc->fg = c;
|
gc->bg = c | COLOUR_FLAG_256;
|
||||||
} else if (fgbg == 48) {
|
|
||||||
gc->flags |= GRID_FLAG_BG256;
|
|
||||||
gc->flags &= ~GRID_FLAG_BGRGB;
|
|
||||||
gc->bg = c;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1668,19 +1660,10 @@ input_csi_dispatch_sgr_rgb(struct input_ctx *ictx, int fgbg, u_int *i)
|
|||||||
if (b == -1 || b > 255)
|
if (b == -1 || b > 255)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (fgbg == 38) {
|
if (fgbg == 38)
|
||||||
gc->flags &= ~GRID_FLAG_FG256;
|
gc->fg = colour_join_rgb(r, g, b);
|
||||||
gc->flags |= GRID_FLAG_FGRGB;
|
else if (fgbg == 48)
|
||||||
gc->fg_rgb.r = r;
|
gc->bg = colour_join_rgb(r, g, b);
|
||||||
gc->fg_rgb.g = g;
|
|
||||||
gc->fg_rgb.b = b;
|
|
||||||
} else if (fgbg == 48) {
|
|
||||||
gc->flags &= ~GRID_FLAG_BG256;
|
|
||||||
gc->flags |= GRID_FLAG_BGRGB;
|
|
||||||
gc->bg_rgb.r = r;
|
|
||||||
gc->bg_rgb.g = g;
|
|
||||||
gc->bg_rgb.b = b;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Handle CSI SGR. */
|
/* Handle CSI SGR. */
|
||||||
@ -1761,11 +1744,9 @@ input_csi_dispatch_sgr(struct input_ctx *ictx)
|
|||||||
case 35:
|
case 35:
|
||||||
case 36:
|
case 36:
|
||||||
case 37:
|
case 37:
|
||||||
gc->flags &= ~(GRID_FLAG_FG256|GRID_FLAG_FGRGB);
|
|
||||||
gc->fg = n - 30;
|
gc->fg = n - 30;
|
||||||
break;
|
break;
|
||||||
case 39:
|
case 39:
|
||||||
gc->flags &= ~(GRID_FLAG_FG256|GRID_FLAG_FGRGB);
|
|
||||||
gc->fg = 8;
|
gc->fg = 8;
|
||||||
break;
|
break;
|
||||||
case 40:
|
case 40:
|
||||||
@ -1776,11 +1757,9 @@ input_csi_dispatch_sgr(struct input_ctx *ictx)
|
|||||||
case 45:
|
case 45:
|
||||||
case 46:
|
case 46:
|
||||||
case 47:
|
case 47:
|
||||||
gc->flags &= ~(GRID_FLAG_BG256|GRID_FLAG_BGRGB);
|
|
||||||
gc->bg = n - 40;
|
gc->bg = n - 40;
|
||||||
break;
|
break;
|
||||||
case 49:
|
case 49:
|
||||||
gc->flags &= ~(GRID_FLAG_BG256|GRID_FLAG_BGRGB);
|
|
||||||
gc->bg = 8;
|
gc->bg = 8;
|
||||||
break;
|
break;
|
||||||
case 90:
|
case 90:
|
||||||
@ -1791,7 +1770,6 @@ input_csi_dispatch_sgr(struct input_ctx *ictx)
|
|||||||
case 95:
|
case 95:
|
||||||
case 96:
|
case 96:
|
||||||
case 97:
|
case 97:
|
||||||
gc->flags &= ~(GRID_FLAG_FG256|GRID_FLAG_FGRGB);
|
|
||||||
gc->fg = n;
|
gc->fg = n;
|
||||||
break;
|
break;
|
||||||
case 100:
|
case 100:
|
||||||
@ -1802,7 +1780,6 @@ input_csi_dispatch_sgr(struct input_ctx *ictx)
|
|||||||
case 105:
|
case 105:
|
||||||
case 106:
|
case 106:
|
||||||
case 107:
|
case 107:
|
||||||
gc->flags &= ~(GRID_FLAG_BG256|GRID_FLAG_BGRGB);
|
|
||||||
gc->bg = n - 10;
|
gc->bg = n - 10;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -552,9 +552,9 @@ screen_redraw_draw_number(struct client *c, struct window_pane *wp, u_int top)
|
|||||||
|
|
||||||
memcpy(&gc, &grid_default_cell, sizeof gc);
|
memcpy(&gc, &grid_default_cell, sizeof gc);
|
||||||
if (w->active == wp)
|
if (w->active == wp)
|
||||||
colour_set_bg(&gc, active_colour);
|
gc.bg = active_colour;
|
||||||
else
|
else
|
||||||
colour_set_bg(&gc, colour);
|
gc.bg = colour;
|
||||||
tty_attributes(tty, &gc, wp);
|
tty_attributes(tty, &gc, wp);
|
||||||
for (ptr = buf; *ptr != '\0'; ptr++) {
|
for (ptr = buf; *ptr != '\0'; ptr++) {
|
||||||
if (*ptr < '0' || *ptr > '9')
|
if (*ptr < '0' || *ptr > '9')
|
||||||
@ -579,9 +579,9 @@ screen_redraw_draw_number(struct client *c, struct window_pane *wp, u_int top)
|
|||||||
draw_text:
|
draw_text:
|
||||||
memcpy(&gc, &grid_default_cell, sizeof gc);
|
memcpy(&gc, &grid_default_cell, sizeof gc);
|
||||||
if (w->active == wp)
|
if (w->active == wp)
|
||||||
colour_set_fg(&gc, active_colour);
|
gc.fg = active_colour;
|
||||||
else
|
else
|
||||||
colour_set_fg(&gc, colour);
|
gc.fg = colour;
|
||||||
tty_attributes(tty, &gc, wp);
|
tty_attributes(tty, &gc, wp);
|
||||||
tty_puts(tty, buf);
|
tty_puts(tty, buf);
|
||||||
|
|
||||||
|
105
style.c
105
style.c
@ -33,7 +33,8 @@ style_parse(const struct grid_cell *defgc, struct grid_cell *gc,
|
|||||||
char tmp[32];
|
char tmp[32];
|
||||||
int val;
|
int val;
|
||||||
size_t end;
|
size_t end;
|
||||||
u_char fg, bg, attr, flags;
|
int fg, bg;
|
||||||
|
u_char attr, flags;
|
||||||
|
|
||||||
if (*in == '\0')
|
if (*in == '\0')
|
||||||
return (0);
|
return (0);
|
||||||
@ -56,38 +57,20 @@ style_parse(const struct grid_cell *defgc, struct grid_cell *gc,
|
|||||||
fg = defgc->fg;
|
fg = defgc->fg;
|
||||||
bg = defgc->bg;
|
bg = defgc->bg;
|
||||||
attr = defgc->attr;
|
attr = defgc->attr;
|
||||||
flags &= ~(GRID_FLAG_FG256|GRID_FLAG_BG256);
|
flags = defgc->flags;
|
||||||
flags |=
|
|
||||||
defgc->flags & (GRID_FLAG_FG256|GRID_FLAG_BG256);
|
|
||||||
} else if (end > 3 && strncasecmp(tmp + 1, "g=", 2) == 0) {
|
} else if (end > 3 && strncasecmp(tmp + 1, "g=", 2) == 0) {
|
||||||
if ((val = colour_fromstring(tmp + 3)) == -1)
|
if ((val = colour_fromstring(tmp + 3)) == -1)
|
||||||
goto error;
|
goto error;
|
||||||
if (*in == 'f' || *in == 'F') {
|
if (*in == 'f' || *in == 'F') {
|
||||||
if (val != 8) {
|
if (val != 8)
|
||||||
if (val & 0x100) {
|
|
||||||
flags |= GRID_FLAG_FG256;
|
|
||||||
val &= ~0x100;
|
|
||||||
} else
|
|
||||||
flags &= ~GRID_FLAG_FG256;
|
|
||||||
fg = val;
|
fg = val;
|
||||||
} else {
|
else
|
||||||
fg = defgc->fg;
|
fg = defgc->fg;
|
||||||
flags &= ~GRID_FLAG_FG256;
|
|
||||||
flags |= defgc->flags & GRID_FLAG_FG256;
|
|
||||||
}
|
|
||||||
} else if (*in == 'b' || *in == 'B') {
|
} else if (*in == 'b' || *in == 'B') {
|
||||||
if (val != 8) {
|
if (val != 8)
|
||||||
if (val & 0x100) {
|
|
||||||
flags |= GRID_FLAG_BG256;
|
|
||||||
val &= ~0x100;
|
|
||||||
} else
|
|
||||||
flags &= ~GRID_FLAG_BG256;
|
|
||||||
bg = val;
|
bg = val;
|
||||||
} else {
|
else
|
||||||
bg = defgc->bg;
|
bg = defgc->bg;
|
||||||
flags &= ~GRID_FLAG_BG256;
|
|
||||||
flags |= defgc->flags & GRID_FLAG_BG256;
|
|
||||||
}
|
|
||||||
} else
|
} else
|
||||||
goto error;
|
goto error;
|
||||||
} else if (strcasecmp(tmp, "none") == 0)
|
} else if (strcasecmp(tmp, "none") == 0)
|
||||||
@ -120,27 +103,19 @@ error:
|
|||||||
const char *
|
const char *
|
||||||
style_tostring(struct grid_cell *gc)
|
style_tostring(struct grid_cell *gc)
|
||||||
{
|
{
|
||||||
int c, off = 0, comma = 0;
|
int off = 0, comma = 0;
|
||||||
static char s[256];
|
static char s[256];
|
||||||
|
|
||||||
*s = '\0';
|
*s = '\0';
|
||||||
|
|
||||||
if (gc->fg != 8 || gc->flags & GRID_FLAG_FG256) {
|
if (gc->fg != 8) {
|
||||||
if (gc->flags & GRID_FLAG_FG256)
|
off += xsnprintf(s, sizeof s, "fg=%s", colour_tostring(gc->fg));
|
||||||
c = gc->fg | 0x100;
|
|
||||||
else
|
|
||||||
c = gc->fg;
|
|
||||||
off += xsnprintf(s, sizeof s, "fg=%s", colour_tostring(c));
|
|
||||||
comma = 1;
|
comma = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gc->bg != 8 || gc->flags & GRID_FLAG_BG256) {
|
if (gc->bg != 8) {
|
||||||
if (gc->flags & GRID_FLAG_BG256)
|
|
||||||
c = gc->bg | 0x100;
|
|
||||||
else
|
|
||||||
c = gc->bg;
|
|
||||||
off += xsnprintf(s + off, sizeof s - off, "%sbg=%s",
|
off += xsnprintf(s + off, sizeof s - off, "%sbg=%s",
|
||||||
comma ? "," : "", colour_tostring(c));
|
comma ? "," : "", colour_tostring(gc->bg));
|
||||||
comma = 1;
|
comma = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -177,9 +152,9 @@ style_update_new(struct options *oo, const char *name, const char *newname)
|
|||||||
value = o->num;
|
value = o->num;
|
||||||
|
|
||||||
if (strstr(name, "-bg") != NULL)
|
if (strstr(name, "-bg") != NULL)
|
||||||
colour_set_bg(gc, value);
|
gc->bg = value;
|
||||||
else if (strstr(name, "-fg") != NULL)
|
else if (strstr(name, "-fg") != NULL)
|
||||||
colour_set_fg(gc, value);
|
gc->fg = value;
|
||||||
else if (strstr(name, "-attr") != NULL)
|
else if (strstr(name, "-attr") != NULL)
|
||||||
gc->attr = value;
|
gc->attr = value;
|
||||||
}
|
}
|
||||||
@ -189,23 +164,15 @@ void
|
|||||||
style_update_old(struct options *oo, const char *name, struct grid_cell *gc)
|
style_update_old(struct options *oo, const char *name, struct grid_cell *gc)
|
||||||
{
|
{
|
||||||
char newname[128];
|
char newname[128];
|
||||||
int c, size;
|
int size;
|
||||||
|
|
||||||
size = strrchr(name, '-') - name;
|
size = strrchr(name, '-') - name;
|
||||||
|
|
||||||
if (gc->flags & GRID_FLAG_BG256)
|
|
||||||
c = gc->bg | 0x100;
|
|
||||||
else
|
|
||||||
c = gc->bg;
|
|
||||||
xsnprintf(newname, sizeof newname, "%.*s-bg", size, name);
|
xsnprintf(newname, sizeof newname, "%.*s-bg", size, name);
|
||||||
options_set_number(oo, newname, c);
|
options_set_number(oo, newname, gc->bg);
|
||||||
|
|
||||||
if (gc->flags & GRID_FLAG_FG256)
|
|
||||||
c = gc->fg | 0x100;
|
|
||||||
else
|
|
||||||
c = gc->fg;
|
|
||||||
xsnprintf(newname, sizeof newname, "%.*s-fg", size, name);
|
xsnprintf(newname, sizeof newname, "%.*s-fg", size, name);
|
||||||
options_set_number(oo, newname, c);
|
options_set_number(oo, newname, gc->fg);
|
||||||
|
|
||||||
xsnprintf(newname, sizeof newname, "%.*s-attr", size, name);
|
xsnprintf(newname, sizeof newname, "%.*s-attr", size, name);
|
||||||
options_set_number(oo, newname, gc->attr);
|
options_set_number(oo, newname, gc->attr);
|
||||||
@ -219,14 +186,8 @@ style_apply(struct grid_cell *gc, struct options *oo, const char *name)
|
|||||||
|
|
||||||
memcpy(gc, &grid_default_cell, sizeof *gc);
|
memcpy(gc, &grid_default_cell, sizeof *gc);
|
||||||
gcp = options_get_style(oo, name);
|
gcp = options_get_style(oo, name);
|
||||||
if (gcp->flags & GRID_FLAG_FG256)
|
gc->fg = gcp->fg;
|
||||||
colour_set_fg(gc, gcp->fg | 0x100);
|
gc->bg = gcp->bg;
|
||||||
else
|
|
||||||
colour_set_fg(gc, gcp->fg);
|
|
||||||
if (gcp->flags & GRID_FLAG_BG256)
|
|
||||||
colour_set_bg(gc, gcp->bg | 0x100);
|
|
||||||
else
|
|
||||||
colour_set_bg(gc, gcp->bg);
|
|
||||||
gc->attr |= gcp->attr;
|
gc->attr |= gcp->attr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -237,18 +198,10 @@ style_apply_update(struct grid_cell *gc, struct options *oo, const char *name)
|
|||||||
struct grid_cell *gcp;
|
struct grid_cell *gcp;
|
||||||
|
|
||||||
gcp = options_get_style(oo, name);
|
gcp = options_get_style(oo, name);
|
||||||
if (gcp->fg != 8 || gcp->flags & GRID_FLAG_FG256) {
|
if (gcp->fg != 8)
|
||||||
if (gcp->flags & GRID_FLAG_FG256)
|
gc->fg = gcp->fg;
|
||||||
colour_set_fg(gc, gcp->fg | 0x100);
|
if (gcp->bg != 8)
|
||||||
else
|
gc->bg = gcp->bg;
|
||||||
colour_set_fg(gc, gcp->fg);
|
|
||||||
}
|
|
||||||
if (gcp->bg != 8 || gcp->flags & GRID_FLAG_BG256) {
|
|
||||||
if (gcp->flags & GRID_FLAG_BG256)
|
|
||||||
colour_set_bg(gc, gcp->bg | 0x100);
|
|
||||||
else
|
|
||||||
colour_set_bg(gc, gcp->bg);
|
|
||||||
}
|
|
||||||
if (gcp->attr != 0)
|
if (gcp->attr != 0)
|
||||||
gc->attr |= gcp->attr;
|
gc->attr |= gcp->attr;
|
||||||
}
|
}
|
||||||
@ -257,10 +210,10 @@ style_apply_update(struct grid_cell *gc, struct options *oo, const char *name)
|
|||||||
int
|
int
|
||||||
style_equal(const struct grid_cell *gc1, const struct grid_cell *gc2)
|
style_equal(const struct grid_cell *gc1, const struct grid_cell *gc2)
|
||||||
{
|
{
|
||||||
return gc1->fg == gc2->fg &&
|
return (gc1->fg == gc2->fg &&
|
||||||
gc1->bg == gc2->bg &&
|
gc1->bg == gc2->bg &&
|
||||||
(gc1->flags & ~GRID_FLAG_PADDING) ==
|
(gc1->flags & ~GRID_FLAG_PADDING) ==
|
||||||
(gc2->flags & ~GRID_FLAG_PADDING) &&
|
(gc2->flags & ~GRID_FLAG_PADDING) &&
|
||||||
(gc1->attr & ~GRID_ATTR_CHARSET) ==
|
(gc1->attr & ~GRID_ATTR_CHARSET) ==
|
||||||
(gc2->attr & ~GRID_ATTR_CHARSET);
|
(gc2->attr & ~GRID_ATTR_CHARSET));
|
||||||
}
|
}
|
||||||
|
@ -230,7 +230,7 @@ window_clock_draw_screen(struct window_pane *wp)
|
|||||||
screen_write_cursormove(&ctx, x, y);
|
screen_write_cursormove(&ctx, x, y);
|
||||||
|
|
||||||
memcpy(&gc, &grid_default_cell, sizeof gc);
|
memcpy(&gc, &grid_default_cell, sizeof gc);
|
||||||
colour_set_fg(&gc, colour);
|
gc.fg = colour;
|
||||||
screen_write_puts(&ctx, &gc, "%s", tim);
|
screen_write_puts(&ctx, &gc, "%s", tim);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -242,7 +242,7 @@ window_clock_draw_screen(struct window_pane *wp)
|
|||||||
y = (screen_size_y(s) / 2) - 3;
|
y = (screen_size_y(s) / 2) - 3;
|
||||||
|
|
||||||
memcpy(&gc, &grid_default_cell, sizeof gc);
|
memcpy(&gc, &grid_default_cell, sizeof gc);
|
||||||
colour_set_bg(&gc, colour);
|
gc.bg = colour;
|
||||||
for (ptr = tim; *ptr != '\0'; ptr++) {
|
for (ptr = tim; *ptr != '\0'; ptr++) {
|
||||||
if (*ptr >= '0' && *ptr <= '9')
|
if (*ptr >= '0' && *ptr <= '9')
|
||||||
idx = *ptr - '0';
|
idx = *ptr - '0';
|
||||||
|
Reference in New Issue
Block a user