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@.
This commit is contained in:
jdc 2006-01-15 11:43:54 +00:00
parent d0cbf72e2a
commit 978ab4ad4e
15 changed files with 152 additions and 165 deletions

View File

@ -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

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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",

View File

@ -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
}
}
}
}

View File

@ -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

View File

@ -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))

View File

@ -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);
}

View File

@ -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;
}
}
/*

View File

@ -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);

View File

@ -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);

View File

@ -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

View File

@ -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;
}
}

View File

@ -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));