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