summaryrefslogtreecommitdiffstats
path: root/screen.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2008-09-08 17:40:51 +0000
committerNicholas Marriott <nicholas.marriott@gmail.com>2008-09-08 17:40:51 +0000
commit4235ddb4e86ddd02275396b890d0671494ff956d (patch)
tree178531844b695e9968b4354b2b116a06d518ee8b /screen.c
parent33aa9315414dca1218b3c88b0c5ffc89d4379974 (diff)
Initial 256 colour support, lightly tested.
Diffstat (limited to 'screen.c')
-rw-r--r--screen.c61
1 files changed, 39 insertions, 22 deletions
diff --git a/screen.c b/screen.c
index d1391025..d20e04aa 100644
--- a/screen.c
+++ b/screen.c
@@ -1,4 +1,4 @@
-/* $Id: screen.c,v 1.66 2008-07-24 21:42:40 nicm Exp $ */
+/* $Id: screen.c,v 1.67 2008-09-08 17:40:51 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -142,14 +142,16 @@ screen_create(struct screen *s, u_int dx, u_int dy, u_int hlimit)
s->hlimit = hlimit;
s->attr = 0;
- s->colr = 0x88;
+ s->fg = 8;
+ s->bg = 8;
s->mode = MODE_CURSOR;
s->title = xstrdup("");
s->grid_data = xmalloc(dy * (sizeof *s->grid_data));
s->grid_attr = xmalloc(dy * (sizeof *s->grid_attr));
- s->grid_colr = xmalloc(dy * (sizeof *s->grid_colr));
+ s->grid_fg = xmalloc(dy * (sizeof *s->grid_fg));
+ s->grid_bg = xmalloc(dy * (sizeof *s->grid_bg));
s->grid_size = xmalloc(dy * (sizeof *s->grid_size));
screen_make_lines(s, 0, dy);
@@ -167,12 +169,13 @@ screen_reset(struct screen *s)
s->rlower = s->dy - 1;
s->attr = 0;
- s->colr = 0x88;
+ s->fg = 8;
+ s->bg = 8;
s->mode = MODE_CURSOR;
screen_display_fill_area(s, 0, 0,
- screen_size_x(s), screen_size_y(s), ' ', 0, 0x88);
+ screen_size_x(s), screen_size_y(s), ' ', 0, 8, 8);
screen_clear_selection(s);
}
@@ -254,7 +257,8 @@ screen_resize(struct screen *s, u_int sx, u_int sy)
ny = s->hsize + sy;
s->grid_data = xrealloc(s->grid_data, ny, sizeof *s->grid_data);
s->grid_attr = xrealloc(s->grid_attr, ny, sizeof *s->grid_attr);
- s->grid_colr = xrealloc(s->grid_colr, ny, sizeof *s->grid_colr);
+ s->grid_fg = xrealloc(s->grid_fg, ny, sizeof *s->grid_fg);
+ s->grid_bg = xrealloc(s->grid_bg, ny, sizeof *s->grid_bg);
s->grid_size = xrealloc(s->grid_size, ny, sizeof *s->grid_size);
s->dy = sy;
@@ -279,8 +283,10 @@ screen_expand_line(struct screen *s, u_int py, u_int nx)
memset(&s->grid_data[py][ox], ' ', nx - ox);
s->grid_attr[py] = xrealloc(s->grid_attr[py], 1, nx);
memset(&s->grid_attr[py][ox], 0, nx - ox);
- s->grid_colr[py] = xrealloc(s->grid_colr[py], 1, nx);
- memset(&s->grid_colr[py][ox], 0x88, nx - ox);
+ s->grid_fg[py] = xrealloc(s->grid_fg[py], 1, nx);
+ memset(&s->grid_fg[py][ox], 8, nx - ox);
+ s->grid_bg[py] = xrealloc(s->grid_bg[py], 1, nx);
+ memset(&s->grid_bg[py][ox], 8, nx - ox);
}
/* Reduce line. */
@@ -291,22 +297,25 @@ screen_reduce_line(struct screen *s, u_int py, u_int nx)
s->grid_data[py] = xrealloc(s->grid_data[py], 1, nx);
s->grid_attr[py] = xrealloc(s->grid_attr[py], 1, nx);
- s->grid_colr[py] = xrealloc(s->grid_colr[py], 1, nx);
+ s->grid_fg[py] = xrealloc(s->grid_fg[py], 1, nx);
+ s->grid_bg[py] = xrealloc(s->grid_bg[py], 1, nx);
}
/* Get cell. */
void
screen_get_cell(struct screen *s,
- u_int cx, u_int cy, u_char *data, u_char *attr, u_char *colr)
+ u_int cx, u_int cy, u_char *data, u_char *attr, u_char *fg, u_char *bg)
{
if (cx >= s->grid_size[cy]) {
*data = ' ';
*attr = 0;
- *colr = 0x88;
+ *fg = 8;
+ *bg = 8;
} else {
*data = s->grid_data[cy][cx];
*attr = s->grid_attr[cy][cx];
- *colr = s->grid_colr[cy][cx];
+ *fg = s->grid_fg[cy][cx];
+ *bg = s->grid_bg[cy][cx];
}
if (screen_check_selection(s, cx, cy))
@@ -316,14 +325,15 @@ screen_get_cell(struct screen *s,
/* Set a cell. */
void
screen_set_cell(struct screen *s,
- u_int cx, u_int cy, u_char data, u_char attr, u_char colr)
+ u_int cx, u_int cy, u_char data, u_char attr, u_char fg, u_char bg)
{
if (cx >= s->grid_size[cy])
screen_expand_line(s, cy, cx + 1);
s->grid_data[cy][cx] = data;
s->grid_attr[cy][cx] = attr;
- s->grid_colr[cy][cx] = colr;
+ s->grid_fg[cy][cx] = fg;
+ s->grid_bg[cy][cx] = bg;
}
/* Destroy a screen. */
@@ -334,7 +344,8 @@ screen_destroy(struct screen *s)
screen_free_lines(s, 0, s->dy + s->hsize);
xfree(s->grid_data);
xfree(s->grid_attr);
- xfree(s->grid_colr);
+ xfree(s->grid_fg);
+ xfree(s->grid_bg);
xfree(s->grid_size);
}
@@ -347,7 +358,8 @@ screen_make_lines(struct screen *s, u_int py, u_int ny)
for (i = py; i < py + ny; i++) {
s->grid_data[i] = NULL;
s->grid_attr[i] = NULL;
- s->grid_colr[i] = NULL;
+ s->grid_fg[i] = NULL;
+ s->grid_bg[i] = NULL;
s->grid_size[i] = 0;
}
}
@@ -365,9 +377,12 @@ screen_free_lines(struct screen *s, u_int py, u_int ny)
if (s->grid_attr[i] != NULL)
xfree(s->grid_attr[i]);
s->grid_attr[i] = NULL;
- if (s->grid_colr[i] != NULL)
- xfree(s->grid_colr[i]);
- s->grid_colr[i] = NULL;
+ if (s->grid_fg[i] != NULL)
+ xfree(s->grid_fg[i]);
+ s->grid_fg[i] = NULL;
+ if (s->grid_bg[i] != NULL)
+ xfree(s->grid_bg[i]);
+ s->grid_bg[i] = NULL;
s->grid_size[i] = 0;
}
}
@@ -381,7 +396,9 @@ screen_move_lines(struct screen *s, u_int dy, u_int py, u_int ny)
memmove(
&s->grid_attr[dy], &s->grid_attr[py], ny * (sizeof *s->grid_attr));
memmove(
- &s->grid_colr[dy], &s->grid_colr[py], ny * (sizeof *s->grid_colr));
+ &s->grid_fg[dy], &s->grid_fg[py], ny * (sizeof *s->grid_fg));
+ memmove(
+ &s->grid_bg[dy], &s->grid_bg[py], ny * (sizeof *s->grid_bg));
memmove(
&s->grid_size[dy], &s->grid_size[py], ny * (sizeof *s->grid_size));
}
@@ -389,13 +406,13 @@ screen_move_lines(struct screen *s, u_int dy, u_int py, u_int ny)
/* Fill an area. */
void
screen_fill_area(struct screen *s, u_int px, u_int py,
- u_int nx, u_int ny, u_char data, u_char attr, u_char colr)
+ u_int nx, u_int ny, u_char data, u_char attr, u_char fg, u_char bg)
{
u_int i, j;
for (i = py; i < py + ny; i++) {
for (j = px; j < px + nx; j++)
- screen_set_cell(s, j, i, data, attr, colr);
+ screen_set_cell(s, j, i, data, attr, fg, bg);
}
}