summaryrefslogtreecommitdiff
path: root/lib/libcurses
diff options
context:
space:
mode:
authorjdc <jdc@NetBSD.org>2006-01-15 11:43:54 +0000
committerjdc <jdc@NetBSD.org>2006-01-15 11:43:54 +0000
commit978ab4ad4e6c7fa0190bb76ee3697b2ec6c408ab (patch)
treeb0b039abfbe5bde00b43fff37d5eb1475fe0bfd1 /lib/libcurses
parentd0cbf72e2a7425ccef5a5a88d0b2dc547c65f9e2 (diff)
Background characters and attributes don't need to be kept per character
cell, as they are merged when characters are added. Remove the per cell storage and clarify the manual page. Pointed out by ruibiao@.
Diffstat (limited to 'lib/libcurses')
-rw-r--r--lib/libcurses/addbytes.c17
-rw-r--r--lib/libcurses/background.c18
-rw-r--r--lib/libcurses/border.c30
-rw-r--r--lib/libcurses/clrtobot.c16
-rw-r--r--lib/libcurses/clrtoeol.c16
-rw-r--r--lib/libcurses/color.c73
-rw-r--r--lib/libcurses/curses_background.337
-rw-r--r--lib/libcurses/curses_private.h4
-rw-r--r--lib/libcurses/delch.c6
-rw-r--r--lib/libcurses/erase.c16
-rw-r--r--lib/libcurses/insch.c21
-rw-r--r--lib/libcurses/insdelln.c8
-rw-r--r--lib/libcurses/newwin.c23
-rw-r--r--lib/libcurses/refresh.c26
-rw-r--r--lib/libcurses/resize.c6
15 files changed, 152 insertions, 165 deletions
diff --git a/lib/libcurses/addbytes.c b/lib/libcurses/addbytes.c
index 934c16e80d8..a3ccb1bb691 100644
--- a/lib/libcurses/addbytes.c
+++ b/lib/libcurses/addbytes.c
@@ -1,4 +1,4 @@
-/* $NetBSD: addbytes.c,v 1.29 2003/08/10 07:37:11 dsl Exp $ */
+/* $NetBSD: addbytes.c,v 1.30 2006/01/15 11:43:54 jdc Exp $ */
/*
* Copyright (c) 1987, 1993, 1994
@@ -34,7 +34,7 @@
#if 0
static char sccsid[] = "@(#)addbytes.c 8.4 (Berkeley) 5/4/94";
#else
-__RCSID("$NetBSD: addbytes.c,v 1.29 2003/08/10 07:37:11 dsl Exp $");
+__RCSID("$NetBSD: addbytes.c,v 1.30 2006/01/15 11:43:54 jdc Exp $");
#endif
#endif /* not lint */
@@ -189,10 +189,15 @@ __waddbytes(WINDOW *win, const char *bytes, int count, attr_t attr)
*lp->firstchp - win->ch_off,
*lp->lastchp - win->ch_off);
#endif
- lp->line[x].ch = c;
- lp->line[x].bch = win->bch;
- lp->line[x].attr = attributes;
- lp->line[x].battr = win->battr;
+ if (win->bch != ' ' && c == ' ')
+ lp->line[x].ch = win->bch;
+ else
+ lp->line[x].ch = c;
+ if (attributes & __COLOR)
+ lp->line[x].attr =
+ attributes | (win->battr & ~__COLOR);
+ else
+ lp->line[x].attr = attributes | win->battr;
if (x == win->maxx - 1)
lp->flags |= __ISPASTEOL;
else
diff --git a/lib/libcurses/background.c b/lib/libcurses/background.c
index f7ad0673847..b9e2bc24ed7 100644
--- a/lib/libcurses/background.c
+++ b/lib/libcurses/background.c
@@ -1,4 +1,4 @@
-/* $NetBSD: background.c,v 1.8 2003/02/17 11:07:19 dsl Exp $ */
+/* $NetBSD: background.c,v 1.9 2006/01/15 11:43:54 jdc Exp $ */
/*-
* Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -38,7 +38,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: background.c,v 1.8 2003/02/17 11:07:19 dsl Exp $");
+__RCSID("$NetBSD: background.c,v 1.9 2006/01/15 11:43:54 jdc Exp $");
#endif /* not lint */
#include "curses.h"
@@ -108,10 +108,16 @@ wbkgd(WINDOW *win, chtype ch)
wbkgdset(win, ch);
for (y = 0; y < win->maxy; y++)
for (x = 0; x < win->maxx; x++) {
- if (ch & A_CHARTEXT)
- win->lines[y]->line[x].bch = ch & __CHARTEXT;
- win->lines[y]->line[x].battr =
- (attr_t) ch & __ATTRIBUTES;
+ /* Copy character if space */
+ if (ch & A_CHARTEXT && win->lines[y]->line[x].ch == ' ')
+ win->lines[y]->line[x].ch = ch & __CHARTEXT;
+ /* Merge attributes */
+ if (win->lines[y]->line[x].attr & __ALTCHARSET)
+ win->lines[y]->line[x].attr =
+ (ch & __ATTRIBUTES) | __ALTCHARSET;
+ else
+ win->lines[y]->line[x].attr =
+ ch & __ATTRIBUTES;
}
__touchwin(win);
return(OK);
diff --git a/lib/libcurses/border.c b/lib/libcurses/border.c
index aa75ea2084f..e913f849975 100644
--- a/lib/libcurses/border.c
+++ b/lib/libcurses/border.c
@@ -1,4 +1,4 @@
-/* $NetBSD: border.c,v 1.7 2001/02/05 21:54:21 jdc Exp $ */
+/* $NetBSD: border.c,v 1.8 2006/01/15 11:43:54 jdc Exp $ */
/*
* Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -38,7 +38,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: border.c,v 1.7 2001/02/05 21:54:21 jdc Exp $");
+__RCSID("$NetBSD: border.c,v 1.8 2006/01/15 11:43:54 jdc Exp $");
#endif /* not lint */
#include "curses.h"
@@ -109,15 +109,23 @@ wborder(WINDOW *win, chtype left, chtype right, chtype top, chtype bottom,
botright & __ATTRIBUTES);
#endif
- /* Merge window attributes */
+ /* Merge window and background attributes */
left |= (left & __COLOR) ? (win->wattr & ~__COLOR) : win->wattr;
+ left |= (left & __COLOR) ? (win->battr & ~__COLOR) : win->battr;
right |= (right & __COLOR) ? (win->wattr & ~__COLOR) : win->wattr;
+ right |= (right & __COLOR) ? (win->battr & ~__COLOR) : win->battr;
top |= (top & __COLOR) ? (win->wattr & ~__COLOR) : win->wattr;
+ top |= (top & __COLOR) ? (win->battr & ~__COLOR) : win->battr;
bottom |= (bottom & __COLOR) ? (win->wattr & ~__COLOR) : win->wattr;
+ bottom |= (bottom & __COLOR) ? (win->battr & ~__COLOR) : win->battr;
topleft |= (topleft & __COLOR) ? (win->wattr & ~__COLOR) : win->wattr;
+ topleft |= (topleft & __COLOR) ? (win->battr & ~__COLOR) : win->battr;
topright |= (topright & __COLOR) ? (win->wattr & ~__COLOR) : win->wattr;
+ topright |= (topright & __COLOR) ? (win->battr & ~__COLOR) : win->battr;
botleft |= (botleft & __COLOR) ? (win->wattr & ~__COLOR) : win->wattr;
+ botleft |= (botleft & __COLOR) ? (win->battr & ~__COLOR) : win->battr;
botright |= (botright & __COLOR) ? (win->wattr & ~__COLOR) : win->wattr;
+ botright |= (botright & __COLOR) ? (win->battr & ~__COLOR) : win->battr;
endx = win->maxx - 1;
endy = win->maxy - 1;
@@ -127,44 +135,28 @@ wborder(WINDOW *win, chtype left, chtype right, chtype top, chtype bottom,
/* Sides */
for (i = 1; i < endy; i++) {
win->lines[i]->line[0].ch = (wchar_t) left & __CHARTEXT;
- win->lines[i]->line[0].bch = win->bch;
win->lines[i]->line[0].attr = (attr_t) left & __ATTRIBUTES;
- win->lines[i]->line[0].battr = win->battr;
win->lines[i]->line[endx].ch = (wchar_t) right & __CHARTEXT;
- win->lines[i]->line[endx].bch = win->bch;
win->lines[i]->line[endx].attr = (attr_t) right & __ATTRIBUTES;
- win->lines[i]->line[endx].battr = win->battr;
}
for (i = 1; i < endx; i++) {
fp[i].ch = (wchar_t) top & __CHARTEXT;
- fp[i].bch = win->bch;
fp[i].attr = (attr_t) top & __ATTRIBUTES;
- fp[i].battr = win->battr;
lp[i].ch = (wchar_t) bottom & __CHARTEXT;
- lp[i].bch = win->bch;
lp[i].attr = (attr_t) bottom & __ATTRIBUTES;
- lp[i].battr = win->battr;
}
/* Corners */
if (!(win->maxx == LINES && win->maxy == COLS &&
(win->flags & __SCROLLOK) && (win->flags & __SCROLLWIN))) {
fp[0].ch = (wchar_t) topleft & __CHARTEXT;
- fp[0].bch = win->bch;
fp[0].attr = (attr_t) topleft & __ATTRIBUTES;
- fp[0].battr = win->battr;
fp[endx].ch = (wchar_t) topright & __CHARTEXT;
- fp[endx].bch = win->bch;
fp[endx].attr = (attr_t) topright & __ATTRIBUTES;
- fp[endx].battr = win->battr;
lp[0].ch = (wchar_t) botleft & __CHARTEXT;
- lp[0].bch = win->bch;
lp[0].attr = (attr_t) botleft & __ATTRIBUTES;
- lp[0].battr = win->battr;
lp[endx].ch = (wchar_t) botright & __CHARTEXT;
- lp[endx].bch = win->bch;
lp[endx].attr = (attr_t) botright & __ATTRIBUTES;
- lp[endx].battr = win->battr;
}
__touchwin(win);
return (OK);
diff --git a/lib/libcurses/clrtobot.c b/lib/libcurses/clrtobot.c
index 79746845ab2..ebe3fc056cb 100644
--- a/lib/libcurses/clrtobot.c
+++ b/lib/libcurses/clrtobot.c
@@ -1,4 +1,4 @@
-/* $NetBSD: clrtobot.c,v 1.15 2003/08/07 16:44:19 agc Exp $ */
+/* $NetBSD: clrtobot.c,v 1.16 2006/01/15 11:43:54 jdc Exp $ */
/*
* Copyright (c) 1981, 1993, 1994
@@ -34,7 +34,7 @@
#if 0
static char sccsid[] = "@(#)clrtobot.c 8.2 (Berkeley) 5/4/94";
#else
-__RCSID("$NetBSD: clrtobot.c,v 1.15 2003/08/07 16:44:19 agc Exp $");
+__RCSID("$NetBSD: clrtobot.c,v 1.16 2006/01/15 11:43:54 jdc Exp $");
#endif
#endif /* not lint */
@@ -64,6 +64,7 @@ wclrtobot(WINDOW *win)
{
int minx, startx, starty, y;
__LDATA *sp, *end, *maxx;
+ attr_t attr;
#ifdef __GNUC__
maxx = NULL; /* XXX gcc -Wuninitialized */
@@ -75,19 +76,20 @@ wclrtobot(WINDOW *win)
starty = win->cury;
startx = win->curx;
}
+ if (__using_color && win != curscr)
+ attr = __default_color;
+ else
+ attr = 0;
for (y = starty; y < win->maxy; y++) {
minx = -1;
end = &win->lines[y]->line[win->maxx];
for (sp = &win->lines[y]->line[startx]; sp < end; sp++)
- if (sp->ch != ' ' || sp->attr != 0 ||
- sp->bch != win->bch || sp->battr != win->battr) {
+ if (sp->ch != ' ' || sp->attr != attr) {
maxx = sp;
if (minx == -1)
minx = sp - win->lines[y]->line;
sp->ch = ' ';
- sp->bch = win->bch;
- sp->attr = 0;
- sp->battr = win->battr;
+ sp->attr = attr;
}
if (minx != -1)
__touchline(win, y, minx, maxx - win->lines[y]->line);
diff --git a/lib/libcurses/clrtoeol.c b/lib/libcurses/clrtoeol.c
index b4e2d288e88..15cc361ed4e 100644
--- a/lib/libcurses/clrtoeol.c
+++ b/lib/libcurses/clrtoeol.c
@@ -1,4 +1,4 @@
-/* $NetBSD: clrtoeol.c,v 1.18 2003/10/05 08:26:02 jdc Exp $ */
+/* $NetBSD: clrtoeol.c,v 1.19 2006/01/15 11:43:54 jdc Exp $ */
/*
* Copyright (c) 1981, 1993, 1994
@@ -34,7 +34,7 @@
#if 0
static char sccsid[] = "@(#)clrtoeol.c 8.2 (Berkeley) 5/4/94";
#else
-__RCSID("$NetBSD: clrtoeol.c,v 1.18 2003/10/05 08:26:02 jdc Exp $");
+__RCSID("$NetBSD: clrtoeol.c,v 1.19 2006/01/15 11:43:54 jdc Exp $");
#endif
#endif /* not lint */
@@ -64,6 +64,7 @@ wclrtoeol(WINDOW *win)
{
int minx, x, y;
__LDATA *end, *maxx, *sp;
+ attr_t attr;
y = win->cury;
x = win->curx;
@@ -80,16 +81,17 @@ wclrtoeol(WINDOW *win)
end = &win->lines[y]->line[win->maxx];
minx = -1;
maxx = &win->lines[y]->line[x];
+ if (__using_color && win != curscr)
+ attr = __default_color;
+ else
+ attr = 0;
for (sp = maxx; sp < end; sp++)
- if (sp->ch != ' ' || sp->attr != 0 ||
- sp->bch != win->bch || sp->battr != win->battr) {
+ if (sp->ch != ' ' || sp->attr != attr) {
maxx = sp;
if (minx == -1)
minx = sp - win->lines[y]->line;
sp->ch = ' ';
- sp->bch = win->bch;
- sp->attr = 0;
- sp->battr = win->battr;
+ sp->attr = attr;
}
#ifdef DEBUG
__CTRACE("CLRTOEOL: minx = %d, maxx = %d, firstch = %d, lastch = %d\n",
diff --git a/lib/libcurses/color.c b/lib/libcurses/color.c
index 296c8a2e017..c363bf3f53a 100644
--- a/lib/libcurses/color.c
+++ b/lib/libcurses/color.c
@@ -1,4 +1,4 @@
-/* $NetBSD: color.c,v 1.29 2004/03/22 18:57:38 jdc Exp $ */
+/* $NetBSD: color.c,v 1.30 2006/01/15 11:43:54 jdc Exp $ */
/*
* Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -38,7 +38,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: color.c,v 1.29 2004/03/22 18:57:38 jdc Exp $");
+__RCSID("$NetBSD: color.c,v 1.30 2006/01/15 11:43:54 jdc Exp $");
#endif /* not lint */
#include "curses.h"
@@ -246,21 +246,14 @@ start_color(void)
/* Set all positions on all windows to curses default colours. */
for (wlp = _cursesi_screen->winlistp; wlp != NULL; wlp = wlp->nextp) {
win = wlp->winp;
- if (wlp->winp == curscr) {
- /* Reset colour attribute on curscr */
- for (y = 0; y < curscr->maxy; y++)
- for (x = 0; x < curscr->maxx; x++) {
- if ((curscr->lines[y]->line[x].battr & __COLOR) == __default_color)
- curscr->lines[y]->line[x].battr &= ~__COLOR;
- }
- } else if (wlp->winp != __virtscr) {
- /* Set background attribute on other windows */
- if (!(win->battr & __COLOR))
- win->battr |= __default_color;
+ if (wlp->winp != __virtscr && wlp->winp != curscr) {
+ /* Set color attribute on other windows */
+ win->battr |= __default_color;
for (y = 0; y < win->maxy; y++) {
- for (x = 0; x < win->maxx; x++)
- if (!(win->lines[y]->line[x].battr & __COLOR))
- win->lines[y]->line[x].battr |= __default_color;
+ for (x = 0; x < win->maxx; x++) {
+ win->lines[y]->line[x].attr &= ~__COLOR;
+ win->lines[y]->line[x].attr |= __default_color;
+ }
}
__touchwin(win);
}
@@ -640,8 +633,7 @@ __change_pair(short pair)
win = wlp->winp;
if (win == __virtscr)
continue;
-
- if (win == curscr) {
+ else if (win == curscr) {
/* Reset colour attribute on curscr */
#ifdef DEBUG
__CTRACE("__change_pair: win == curscr\n");
@@ -651,35 +643,32 @@ __change_pair(short pair)
for (x = 0; x < curscr->maxx; x++) {
if ((lp->line[x].attr & __COLOR) == cl)
lp->line[x].attr &= ~__COLOR;
- if ((lp->line[x].battr & __COLOR) == cl)
- lp->line[x].battr &= ~__COLOR;
}
}
- continue;
- }
-
- /* Mark dirty those positions with colour pair "pair" */
- for (y = 0; y < win->maxy; y++) {
- lp = curscr->lines[y];
- for (x = 0; x < win->maxx; x++)
- if ((lp->line[x].attr & __COLOR) == cl ||
- (lp->line[x].battr & __COLOR) == cl) {
- if (!(lp->flags & __ISDIRTY))
- lp->flags |= __ISDIRTY;
- /*
- * firstchp/lastchp are shared
- * between parent window and
- * sub-window.
- */
- if (*lp->firstchp > x)
+ } else {
+ /* Mark dirty those positions with colour pair "pair" */
+ for (y = 0; y < win->maxy; y++) {
+ lp = curscr->lines[y];
+ for (x = 0; x < win->maxx; x++)
+ if ((lp->line[x].attr &
+ __COLOR) == cl) {
+ if (!(lp->flags & __ISDIRTY))
+ lp->flags |= __ISDIRTY;
+ /*
+ * firstchp/lastchp are shared
+ * between parent window and
+ * sub-window.
+ */
+ if (*lp->firstchp > x)
*lp->firstchp = x;
- if (*lp->lastchp < x)
- *lp->lastchp = x;
- }
+ if (*lp->lastchp < x)
+ *lp->lastchp = x;
+ }
#ifdef DEBUG
- if ((win->lines[y]->flags & __ISDIRTY))
- __CTRACE("__change_pair: first = %d, last = %d\n", *win->lines[y]->firstchp, *win->lines[y]->lastchp);
+ if ((win->lines[y]->flags & __ISDIRTY))
+ __CTRACE("__change_pair: first = %d, last = %d\n", *win->lines[y]->firstchp, *win->lines[y]->lastchp);
#endif
+ }
}
}
}
diff --git a/lib/libcurses/curses_background.3 b/lib/libcurses/curses_background.3
index fe246ae52d2..94f5df8efe1 100644
--- a/lib/libcurses/curses_background.3
+++ b/lib/libcurses/curses_background.3
@@ -1,4 +1,4 @@
-.\" $NetBSD: curses_background.3,v 1.3 2003/04/16 13:35:00 wiz Exp $
+.\" $NetBSD: curses_background.3,v 1.4 2006/01/15 11:43:54 jdc Exp $
.\" Copyright (c) 2002 The NetBSD Foundation, Inc.
.\" All rights reserved.
.\"
@@ -65,14 +65,33 @@ sets the background attributes of the specified window
to
.Fa ch .
.Pp
+When the background attributes are set on a window, characters are added to
+the window with the logical
+.Em OR
+of the background attributes and the character's attributes.
+If both the background attribute and the character attribute contain color,
+the color of the character attribute is rendered.
+If the background attribute contains a non-space character, then this
+character is added where the foreground character is a space character.
+.Pp
+Note that subwindows created from
+.Fa win
+inherit the background attributes of
+.Fa win .
+.Pp
The function
.Fn wbkgd win ch
sets the background attributes of the specified window
.Fa win
to
.Fa ch
-and also sets the background attribute of every character position on that
-window.
+and also sets the rendition of every character position on that window,
+as if the characters had been newly added to
+.Fa win .
+The rendition of characters on subwindows of
+.Fa win
+is also set to
+.Fa ch .
.Pp
The functions
.Fn bkgdset ch
@@ -84,15 +103,6 @@ and
.Fn wbkgd stdscr ch ,
respectively.
.Pp
-When the background attributes are set on a window, characters are rendered
-with the logical
-.Em OR
-of the background attributes and the character's attributes.
-If both the background attribute and the character attribute contain color,
-the color of the character attribute is displayed.
-If the background attribute contains a non-space character, then this
-character is rendered where the foreground character is a space character.
-.Pp
The function
.Fn getbkgd win
returns the background attributes for the window
@@ -105,7 +115,8 @@ and
return OK on success and ERR on failure.
.Sh SEE ALSO
.Xr curses_attributes 3 ,
-.Xr curses_color 3
+.Xr curses_color 3 ,
+.Xr curses_window
.Sh STANDARDS
The
.Nx
diff --git a/lib/libcurses/curses_private.h b/lib/libcurses/curses_private.h
index 912b2b36f79..ab052fe0336 100644
--- a/lib/libcurses/curses_private.h
+++ b/lib/libcurses/curses_private.h
@@ -1,4 +1,4 @@
-/* $NetBSD: curses_private.h,v 1.37 2005/02/18 22:16:27 dsl Exp $ */
+/* $NetBSD: curses_private.h,v 1.38 2006/01/15 11:43:54 jdc Exp $ */
/*-
* Copyright (c) 1998-2000 Brett Lymn
@@ -73,8 +73,6 @@ extern char *__tc_ac, *__tc_AB, *__tc_ae, *__tc_AF, *__tc_AL,
struct __ldata {
wchar_t ch; /* Character */
attr_t attr; /* Attributes */
- wchar_t bch; /* Background character */
- attr_t battr; /* Background attributes */
};
#define __LDATASIZE (sizeof(__LDATA))
diff --git a/lib/libcurses/delch.c b/lib/libcurses/delch.c
index ab8064b0990..20e7a60c230 100644
--- a/lib/libcurses/delch.c
+++ b/lib/libcurses/delch.c
@@ -1,4 +1,4 @@
-/* $NetBSD: delch.c,v 1.17 2004/01/20 08:28:26 wiz Exp $ */
+/* $NetBSD: delch.c,v 1.18 2006/01/15 11:43:54 jdc Exp $ */
/*
* Copyright (c) 1981, 1993, 1994
@@ -34,7 +34,7 @@
#if 0
static char sccsid[] = "@(#)delch.c 8.2 (Berkeley) 5/4/94";
#else
-__RCSID("$NetBSD: delch.c,v 1.17 2004/01/20 08:28:26 wiz Exp $");
+__RCSID("$NetBSD: delch.c,v 1.18 2006/01/15 11:43:54 jdc Exp $");
#endif
#endif /* not lint */
@@ -96,9 +96,7 @@ wdelch(WINDOW *win)
temp1++, temp2++;
}
temp1->ch = ' ';
- temp1->bch = win->bch;
temp1->attr = 0;
- temp1->battr = win->battr;
__touchline(win, (int) win->cury, (int) win->curx, (int) win->maxx - 1);
return (OK);
}
diff --git a/lib/libcurses/erase.c b/lib/libcurses/erase.c
index 9d1df93a0d0..9cb10e7c2d5 100644
--- a/lib/libcurses/erase.c
+++ b/lib/libcurses/erase.c
@@ -1,4 +1,4 @@
-/* $NetBSD: erase.c,v 1.18 2005/07/27 20:17:42 jdc Exp $ */
+/* $NetBSD: erase.c,v 1.19 2006/01/15 11:43:54 jdc Exp $ */
/*
* Copyright (c) 1981, 1993, 1994
@@ -34,7 +34,7 @@
#if 0
static char sccsid[] = "@(#)erase.c 8.2 (Berkeley) 5/4/94";
#else
-__RCSID("$NetBSD: erase.c,v 1.18 2005/07/27 20:17:42 jdc Exp $");
+__RCSID("$NetBSD: erase.c,v 1.19 2006/01/15 11:43:54 jdc Exp $");
#endif
#endif /* not lint */
@@ -65,20 +65,22 @@ werase(WINDOW *win)
int y;
__LDATA *sp, *end, *start;
+ attr_t attr;
#ifdef DEBUG
__CTRACE("werase: (%p)\n", win);
#endif
+ if (__using_color && win != curscr)
+ attr = __default_color;
+ else
+ attr = 0;
for (y = 0; y < win->maxy; y++) {
start = win->lines[y]->line;
end = &start[win->maxx];
for (sp = start; sp < end; sp++)
- if (sp->ch != ' ' || sp->attr != 0 ||
- sp->bch != win->bch || sp->battr != win->battr) {
+ if (sp->ch != ' ' || sp->attr != 0) {
sp->ch = ' ';
- sp->bch = win->bch;
- sp->attr = 0;
- sp->battr = win->battr;
+ sp->attr = attr;
}
}
/*
diff --git a/lib/libcurses/insch.c b/lib/libcurses/insch.c
index 0da69d3dde1..b56ef6fd585 100644
--- a/lib/libcurses/insch.c
+++ b/lib/libcurses/insch.c
@@ -1,4 +1,4 @@
-/* $NetBSD: insch.c,v 1.17 2003/08/07 16:44:22 agc Exp $ */
+/* $NetBSD: insch.c,v 1.18 2006/01/15 11:43:54 jdc Exp $ */
/*
* Copyright (c) 1981, 1993, 1994
@@ -34,7 +34,7 @@
#if 0
static char sccsid[] = "@(#)insch.c 8.2 (Berkeley) 5/4/94";
#else
-__RCSID("$NetBSD: insch.c,v 1.17 2003/08/07 16:44:22 agc Exp $");
+__RCSID("$NetBSD: insch.c,v 1.18 2006/01/15 11:43:54 jdc Exp $");
#endif
#endif /* not lint */
@@ -89,7 +89,12 @@ winsch(WINDOW *win, chtype ch)
{
__LDATA *end, *temp1, *temp2;
+ attr_t attr;
+ if (__using_color)
+ attr = __default_color;
+ else
+ attr = 0;
end = &win->lines[win->cury]->line[win->curx];
temp1 = &win->lines[win->cury]->line[win->maxx - 1];
temp2 = temp1 - 1;
@@ -98,15 +103,17 @@ winsch(WINDOW *win, chtype ch)
temp1--, temp2--;
}
temp1->ch = (wchar_t) ch & __CHARTEXT;
- temp1->bch = win->bch;
+ if (temp1->ch == ' ')
+ temp1->ch = win->bch;
temp1->attr = (attr_t) ch & __ATTRIBUTES;
- temp1->battr = win->battr;
+ if (temp1->attr & __COLOR)
+ temp1->attr |= (win->bch & ~__COLOR);
+ else
+ temp1->attr |= win->bch;
__touchline(win, (int) win->cury, (int) win->curx, (int) win->maxx - 1);
if (win->cury == LINES - 1 &&
(win->lines[LINES - 1]->line[COLS - 1].ch != ' ' ||
- win->lines[LINES - 1]->line[COLS - 1].bch != ' ' ||
- win->lines[LINES - 1]->line[COLS - 1].attr != 0 ||
- win->lines[LINES - 1]->line[COLS - 1].battr != 0)) {
+ win->lines[LINES - 1]->line[COLS - 1].attr != attr)) {
if (win->flags & __SCROLLOK) {
wrefresh(win);
scroll(win);
diff --git a/lib/libcurses/insdelln.c b/lib/libcurses/insdelln.c
index 29d69820610..b9991c96ef1 100644
--- a/lib/libcurses/insdelln.c
+++ b/lib/libcurses/insdelln.c
@@ -1,4 +1,4 @@
-/* $NetBSD: insdelln.c,v 1.10 2003/07/29 16:42:55 dsl Exp $ */
+/* $NetBSD: insdelln.c,v 1.11 2006/01/15 11:43:54 jdc Exp $ */
/*
* Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -38,7 +38,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: insdelln.c,v 1.10 2003/07/29 16:42:55 dsl Exp $");
+__RCSID("$NetBSD: insdelln.c,v 1.11 2006/01/15 11:43:54 jdc Exp $");
#endif /* not lint */
/*
@@ -113,9 +113,7 @@ winsdelln(WINDOW *win, int lines)
for (y = win->cury - 1 + lines; y >= win->cury; --y)
for (i = 0; i < win->maxx; i++) {
win->lines[y]->line[i].ch = ' ';
- win->lines[y]->line[i].bch = win->bch;
win->lines[y]->line[i].attr = 0;
- win->lines[y]->line[i].battr = win->battr;
}
for (y = last; y >= win->cury; --y)
__touchline(win, y, 0, (int) win->maxx - 1);
@@ -149,9 +147,7 @@ winsdelln(WINDOW *win, int lines)
for (y = last - lines; y < last; y++)
for (i = 0; i < win->maxx; i++) {
win->lines[y]->line[i].ch = ' ';
- win->lines[y]->line[i].bch = win->bch;
win->lines[y]->line[i].attr = 0;
- win->lines[y]->line[i].battr = win->battr;
}
for (y = win->cury; y < last; y++)
__touchline(win, y, 0, (int) win->maxx - 1);
diff --git a/lib/libcurses/newwin.c b/lib/libcurses/newwin.c
index 5bb4bd51557..21cc26027f9 100644
--- a/lib/libcurses/newwin.c
+++ b/lib/libcurses/newwin.c
@@ -1,4 +1,4 @@
-/* $NetBSD: newwin.c,v 1.42 2004/03/28 08:58:37 jdc Exp $ */
+/* $NetBSD: newwin.c,v 1.43 2006/01/15 11:43:54 jdc Exp $ */
/*
* Copyright (c) 1981, 1993, 1994
@@ -34,7 +34,7 @@
#if 0
static char sccsid[] = "@(#)newwin.c 8.3 (Berkeley) 7/27/94";
#else
-__RCSID("$NetBSD: newwin.c,v 1.42 2004/03/28 08:58:37 jdc Exp $");
+__RCSID("$NetBSD: newwin.c,v 1.43 2006/01/15 11:43:54 jdc Exp $");
#endif
#endif /* not lint */
@@ -132,6 +132,11 @@ __newwin(SCREEN *screen, int nlines, int ncols, int by, int bx, int ispad)
if ((win = __makenew(screen, maxy, maxx, by, bx, 0, ispad)) == NULL)
return (NULL);
+ win->bch = ' ';
+ if (__using_color)
+ win->battr = __default_color;
+ else
+ win->battr = 0;
win->nextp = win;
win->ch_off = 0;
win->orig = NULL;
@@ -150,12 +155,7 @@ __newwin(SCREEN *screen, int nlines, int ncols, int by, int bx, int ispad)
lp->flags = 0;
for (sp = lp->line, j = 0; j < maxx; j++, sp++) {
sp->ch = ' ';
- sp->bch = ' ';
sp->attr = 0;
- if (__using_color)
- sp->battr = __default_color;
- else
- sp->battr = 0;
}
lp->hash = __hash((char *)(void *)lp->line,
(size_t) (ncols * __LDATASIZE));
@@ -195,6 +195,8 @@ __subwin(WINDOW *orig, int nlines, int ncols, int by, int bx, int ispad)
if ((win = __makenew(_cursesi_screen, maxy, maxx,
by, bx, 1, ispad)) == NULL)
return (NULL);
+ win->bch = orig->bch;
+ win->battr = orig->battr;
win->reqy = nlines;
win->reqx = ncols;
win->nextp = orig->nextp;
@@ -341,11 +343,6 @@ __makenew(SCREEN *screen, int nlines, int ncols, int by, int bx, int sub,
win->flags = (__IDLINE | __IDCHAR);
win->delay = -1;
win->wattr = 0;
- win->bch = ' ';
- if (__using_color)
- win->battr = __default_color;
- else
- win->battr = 0;
win->scr_t = 0;
win->scr_b = win->maxy - 1;
if (ispad) {
@@ -365,8 +362,6 @@ __makenew(SCREEN *screen, int nlines, int ncols, int by, int bx, int sub,
__CTRACE("makenew: win->maxx = %d\n", win->maxx);
__CTRACE("makenew: win->begy = %d\n", win->begy);
__CTRACE("makenew: win->begx = %d\n", win->begx);
- __CTRACE("makenew: win->bch = %s\n", unctrl(win->bch));
- __CTRACE("makenew: win->battr = %08x\n", win->battr);
__CTRACE("makenew: win->scr_t = %d\n", win->scr_t);
__CTRACE("makenew: win->scr_b = %d\n", win->scr_b);
#endif
diff --git a/lib/libcurses/refresh.c b/lib/libcurses/refresh.c
index cc1b1435a3b..cfbda51d061 100644
--- a/lib/libcurses/refresh.c
+++ b/lib/libcurses/refresh.c
@@ -1,4 +1,4 @@
-/* $NetBSD: refresh.c,v 1.62 2005/10/23 18:38:52 dsl Exp $ */
+/* $NetBSD: refresh.c,v 1.63 2006/01/15 11:43:54 jdc Exp $ */
/*
* Copyright (c) 1981, 1993, 1994
@@ -34,7 +34,7 @@
#if 0
static char sccsid[] = "@(#)refresh.c 8.7 (Berkeley) 8/13/94";
#else
-__RCSID("$NetBSD: refresh.c,v 1.62 2005/10/23 18:38:52 dsl Exp $");
+__RCSID("$NetBSD: refresh.c,v 1.63 2006/01/15 11:43:54 jdc Exp $");
#endif
#endif /* not lint */
@@ -220,27 +220,15 @@ _cursesi_wnoutrefresh(SCREEN *screen, WINDOW *win, int begy, int begx,
__CTRACE("_wnoutrefresh: copy from %d, %d to %d, %d\n",
wy, wx, y_off, x_off);
#endif
+ /* Copy character */
+ vlp->line[x_off].ch = wlp->line[wx].ch;
+ /* Copy attributes */
vlp->line[x_off].attr = wlp->line[wx].attr;
- /* Copy attributes */
- if (wlp->line[wx].attr & __COLOR)
- vlp->line[x_off].attr |=
- wlp->line[wx].battr & ~__COLOR;
- else
- vlp->line[x_off].attr |=
- wlp->line[wx].battr;
/* Check for nca conflict with colour */
if ((vlp->line[x_off].attr & __COLOR) &&
(vlp->line[x_off].attr &
_cursesi_screen->nca))
vlp->line[x_off].attr &= ~__COLOR;
- /* Copy character */
- if (wlp->line[wx].ch == ' ' &&
- wlp->line[wx].bch != ' ')
- vlp->line[x_off].ch
- = wlp->line[wx].bch;
- else
- vlp->line[x_off].ch
- = wlp->line[wx].ch;
wx++;
x_off++;
}
@@ -530,7 +518,7 @@ makech(wy)
int wy;
{
WINDOW *win;
- static __LDATA blank = {' ', 0, ' ', 0};
+ static __LDATA blank = {' ', 0};
__LDATA *nsp, *csp, *cp, *cep;
int clsp, nlsp; /* Last space in lines. */
int lch, wx;
@@ -1001,9 +989,7 @@ done:
if (buf[0].ch != ' ') {
for (i = 0; i < BLANKSIZE; i++) {
buf[i].ch = ' ';
- buf[i].bch = ' ';
buf[i].attr = 0;
- buf[i].battr = 0;
}
}
diff --git a/lib/libcurses/resize.c b/lib/libcurses/resize.c
index b865cf4d26b..e88c52fcfde 100644
--- a/lib/libcurses/resize.c
+++ b/lib/libcurses/resize.c
@@ -1,4 +1,4 @@
-/* $NetBSD: resize.c,v 1.11 2004/04/29 22:28:51 christos Exp $ */
+/* $NetBSD: resize.c,v 1.12 2006/01/15 11:43:54 jdc Exp $ */
/*
* Copyright (c) 2001
@@ -40,7 +40,7 @@
#if 0
static char sccsid[] = "@(#)resize.c blymn 2001/08/26";
#else
-__RCSID("$NetBSD: resize.c,v 1.11 2004/04/29 22:28:51 christos Exp $");
+__RCSID("$NetBSD: resize.c,v 1.12 2006/01/15 11:43:54 jdc Exp $");
#endif
#endif /* not lint */
@@ -258,9 +258,7 @@ __resizewin(WINDOW *win, int nlines, int ncols)
lp = win->lines[i];
for (sp = lp->line, j = 0; j < win->maxx; j++, sp++) {
sp->ch = ' ';
- sp->bch = ' ';
sp->attr = 0;
- sp->battr = 0;
}
lp->hash = __hash((char *)(void *)lp->line,
(size_t) (ncols * __LDATASIZE));