Module Name: src
Committed By: roy
Date: Fri Mar 13 02:57:26 UTC 2020
Modified Files:
src/lib/libcurses: clrtobot.c clrtoeol.c curses.h curses_private.h
erase.c
Log Message:
curses: wrap the erase logic in a macro
Easier to use, it's in one place and now hopefully everyone is happy.
X
To generate a diff of this commit:
cvs rdiff -u -r1.25 -r1.26 src/lib/libcurses/clrtobot.c
cvs rdiff -u -r1.29 -r1.30 src/lib/libcurses/clrtoeol.c
cvs rdiff -u -r1.127 -r1.128 src/lib/libcurses/curses.h
cvs rdiff -u -r1.71 -r1.72 src/lib/libcurses/curses_private.h
cvs rdiff -u -r1.30 -r1.31 src/lib/libcurses/erase.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/lib/libcurses/clrtobot.c
diff -u src/lib/libcurses/clrtobot.c:1.25 src/lib/libcurses/clrtobot.c:1.26
--- src/lib/libcurses/clrtobot.c:1.25 Thu Mar 12 12:17:15 2020
+++ src/lib/libcurses/clrtobot.c Fri Mar 13 02:57:26 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: clrtobot.c,v 1.25 2020/03/12 12:17:15 roy Exp $ */
+/* $NetBSD: clrtobot.c,v 1.26 2020/03/13 02:57:26 roy 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.25 2020/03/12 12:17:15 roy Exp $");
+__RCSID("$NetBSD: clrtobot.c,v 1.26 2020/03/13 02:57:26 roy Exp $");
#endif
#endif /* not lint */
@@ -87,15 +87,12 @@ wclrtobot(WINDOW *win)
attr = win->battr & __ATTRIBUTES;
else
attr = 0;
+
for (y = starty; y < win->maxy; y++) {
minx = -1;
end = &win->alines[y]->line[win->maxx];
for (sp = &win->alines[y]->line[startx]; sp < end; sp++) {
- if (sp->ch == bch &&
-#ifdef HAVE_WCHAR
- sp->nsp == NULL && WCOL(*sp) >= 0 &&
-#endif
- (sp->attr & WA_ATTRIBUTES) == attr)
+ if (!(__NEED_ERASE(sp, bch, attr)))
continue;
maxx = sp;
@@ -115,6 +112,7 @@ wclrtobot(WINDOW *win)
(int)(maxx - win->alines[y]->line));
startx = 0;
}
+
__sync(win);
return OK;
}
Index: src/lib/libcurses/clrtoeol.c
diff -u src/lib/libcurses/clrtoeol.c:1.29 src/lib/libcurses/clrtoeol.c:1.30
--- src/lib/libcurses/clrtoeol.c:1.29 Thu Mar 12 12:17:15 2020
+++ src/lib/libcurses/clrtoeol.c Fri Mar 13 02:57:26 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: clrtoeol.c,v 1.29 2020/03/12 12:17:15 roy Exp $ */
+/* $NetBSD: clrtoeol.c,v 1.30 2020/03/13 02:57:26 roy 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.29 2020/03/12 12:17:15 roy Exp $");
+__RCSID("$NetBSD: clrtoeol.c,v 1.30 2020/03/13 02:57:26 roy Exp $");
#endif
#endif /* not lint */
@@ -92,14 +92,10 @@ wclrtoeol(WINDOW *win)
attr = win->battr & __ATTRIBUTES;
else
attr = 0;
+
for (sp = maxx; sp < end; sp++) {
- if (sp->ch == bch &&
-#ifdef HAVE_WCHAR
- sp->nsp == NULL && WCOL(*sp) >= 0 &&
-#endif
- (sp->attr & WA_ATTRIBUTES) == attr)
+ if (!(__NEED_ERASE(sp, bch, attr)))
continue;
-
maxx = sp;
if (minx == -1)
minx = (int)(sp - win->alines[y]->line);
@@ -111,6 +107,7 @@ wclrtoeol(WINDOW *win)
SET_WCOL(*sp, 1);
#endif
}
+
#ifdef DEBUG
__CTRACE(__CTRACE_ERASE, "CLRTOEOL: y = %d, minx = %d, maxx = %d, "
"firstch = %d, lastch = %d\n",
Index: src/lib/libcurses/curses.h
diff -u src/lib/libcurses/curses.h:1.127 src/lib/libcurses/curses.h:1.128
--- src/lib/libcurses/curses.h:1.127 Thu Mar 12 12:17:15 2020
+++ src/lib/libcurses/curses.h Fri Mar 13 02:57:26 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: curses.h,v 1.127 2020/03/12 12:17:15 roy Exp $ */
+/* $NetBSD: curses.h,v 1.128 2020/03/13 02:57:26 roy Exp $ */
/*
* Copyright (c) 1981, 1993, 1994
@@ -275,9 +275,7 @@ typedef struct __screen SCREEN;
#define WA_VERTICAL 0x00000010 /* Vertical highlight */
#define WA_LEFT 0x00000020 /* Left highlight */
#define WA_RIGHT 0x00000040 /* Right highlight */
-#else /* HAVE_WCHAR */
-#define WA_ATTRIBUTES 0 /* Just to make our code easier */
-#endif /* !HAVE_WCHAR */
+#endif /* HAVE_WCHAR */
/*
* Alternate character set definitions
Index: src/lib/libcurses/curses_private.h
diff -u src/lib/libcurses/curses_private.h:1.71 src/lib/libcurses/curses_private.h:1.72
--- src/lib/libcurses/curses_private.h:1.71 Sun Jun 9 07:40:14 2019
+++ src/lib/libcurses/curses_private.h Fri Mar 13 02:57:26 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: curses_private.h,v 1.71 2019/06/09 07:40:14 blymn Exp $ */
+/* $NetBSD: curses_private.h,v 1.72 2020/03/13 02:57:26 roy Exp $ */
/*-
* Copyright (c) 1998-2000 Brett Lymn
@@ -337,6 +337,18 @@ extern SCREEN *_cursesi_screen;
void __CTRACE(int, const char *, ...) __attribute__((__format__(__printf__, 2, 3)));
#endif
+/* Common erase logic */
+#ifdef HAVE_WCHAR
+#define __NEED_ERASE(sp, bch, attr) \
+ ((sp)->ch != (bch) || \
+ ((sp)->attr & WA_ATTRIBUTES) != (attr) || \
+ (sp)->nsp != NULL || \
+ WCOL(*sp) < 0)
+#else
+#define __NEED_ERASE(sp, bch, attr) \
+ ((sp)->ch != (bch) || (sp)->attr != (attr))
+#endif
+
/* Private functions. */
int __cputchar_args(int, void *);
void _cursesi_free_keymap(keymap_t *);
Index: src/lib/libcurses/erase.c
diff -u src/lib/libcurses/erase.c:1.30 src/lib/libcurses/erase.c:1.31
--- src/lib/libcurses/erase.c:1.30 Thu Mar 12 12:17:15 2020
+++ src/lib/libcurses/erase.c Fri Mar 13 02:57:26 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: erase.c,v 1.30 2020/03/12 12:17:15 roy Exp $ */
+/* $NetBSD: erase.c,v 1.31 2020/03/13 02:57:26 roy 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.30 2020/03/12 12:17:15 roy Exp $");
+__RCSID("$NetBSD: erase.c,v 1.31 2020/03/13 02:57:26 roy Exp $");
#endif
#endif /* not lint */
@@ -81,17 +81,13 @@ werase(WINDOW *win)
attr = win->battr & __ATTRIBUTES;
else
attr = 0;
+
for (y = 0; y < win->maxy; y++) {
start = win->alines[y]->line;
end = &start[win->maxx];
for (sp = start; sp < end; sp++) {
- if (sp->ch == bch &&
-#ifdef HAVE_WCHAR
- sp->nsp == NULL && WCOL(*sp) >= 0 &&
-#endif
- (sp->attr & WA_ATTRIBUTES) == attr)
+ if (!(__NEED_ERASE(sp, bch, attr)))
continue;
-
sp->attr = attr | (sp->attr & __ALTCHARSET);
sp->ch = bch;
#ifdef HAVE_WCHAR