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

Reply via email to