Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/lib/libcurses Back out incorrect fix for PR 53617 and fix it...



details:   https://anonhg.NetBSD.org/src/rev/de23dd927f13
branches:  trunk
changeset: 451395:de23dd927f13
user:      blymn <blymn%NetBSD.org@localhost>
date:      Mon May 20 22:17:41 2019 +0000

description:
Back out incorrect fix for PR 53617 and fix it in a different way.
Keep track of the cursor location, if getch is called without a refresh
and without pending updates (dirty windows) then move the cursor to the
correct location directly.  Doing this prevents unnecessary refreshes.

diffstat:

 lib/libcurses/add_wch.c        |  11 ++++++-----
 lib/libcurses/add_wchstr.c     |   6 +++---
 lib/libcurses/addbytes.c       |  20 +++++++++++++-------
 lib/libcurses/addch.c          |   6 +++---
 lib/libcurses/addchnstr.c      |   8 ++++----
 lib/libcurses/addnstr.c        |   6 +++---
 lib/libcurses/addwstr.c        |   6 +++---
 lib/libcurses/copywin.c        |   6 +++---
 lib/libcurses/cr_put.c         |   6 +++---
 lib/libcurses/curses_private.h |   4 +++-
 lib/libcurses/delch.c          |   6 +++---
 lib/libcurses/erase.c          |   6 +++---
 lib/libcurses/fileio.h         |   2 +-
 lib/libcurses/get_wch.c        |   8 ++++----
 lib/libcurses/get_wstr.c       |  24 ++++++++++++------------
 lib/libcurses/getch.c          |  28 +++++++++++++++++++++++++---
 lib/libcurses/getstr.c         |  24 ++++++++++++------------
 lib/libcurses/in_wch.c         |   6 +++---
 lib/libcurses/in_wchstr.c      |   8 ++++----
 lib/libcurses/inch.c           |   6 +++---
 lib/libcurses/inchstr.c        |   8 ++++----
 lib/libcurses/ins_wch.c        |   6 +++---
 lib/libcurses/ins_wstr.c       |   8 ++++----
 lib/libcurses/insch.c          |   7 ++++---
 lib/libcurses/insstr.c         |   8 ++++----
 lib/libcurses/instr.c          |   8 ++++----
 lib/libcurses/inwstr.c         |   8 ++++----
 lib/libcurses/line.c           |  20 ++++++++++----------
 lib/libcurses/move.c           |  34 ++++++++++++++++++++++++----------
 lib/libcurses/newwin.c         |   6 +++---
 lib/libcurses/printw.c         |   6 +++---
 lib/libcurses/putchar.c        |  18 ++++++++++++------
 lib/libcurses/refresh.c        |  12 ++++++++----
 lib/libcurses/scroll.c         |   8 ++++----
 34 files changed, 205 insertions(+), 149 deletions(-)

diffs (truncated from 1412 to 300 lines):

diff -r ca21f11c6218 -r de23dd927f13 lib/libcurses/add_wch.c
--- a/lib/libcurses/add_wch.c   Mon May 20 20:35:45 2019 +0000
+++ b/lib/libcurses/add_wch.c   Mon May 20 22:17:41 2019 +0000
@@ -1,4 +1,4 @@
-/*   $NetBSD: add_wch.c,v 1.7 2019/04/24 07:09:44 blymn Exp $ */
+/*   $NetBSD: add_wch.c,v 1.8 2019/05/20 22:17:41 blymn Exp $ */
 
 /*
  * Copyright (c) 2005 The NetBSD Foundation Inc.
@@ -36,7 +36,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: add_wch.c,v 1.7 2019/04/24 07:09:44 blymn Exp $");
+__RCSID("$NetBSD: add_wch.c,v 1.8 2019/05/20 22:17:41 blymn Exp $");
 #endif /* not lint */
 
 #include <stdlib.h>
@@ -76,7 +76,7 @@
 int
 mvwadd_wch(WINDOW *win, int y, int x, const cchar_t *wch)
 {
-       if (wmove(win, y, x) == ERR)
+       if (_cursesi_wmove(win, y, x, 0) == ERR)
                return ERR;
 
        return wadd_wch(win, wch);
@@ -92,11 +92,12 @@
 int
 wadd_wch(WINDOW *win, const cchar_t *wch)
 {
-       int x = win->curx, y = win->cury;
+       int y = win->cury;
        __LINE *lnp = NULL;
 
 #ifdef DEBUG
        int i;
+       int x = win->curx;
 
        for (i = 0; i < win->maxy; i++) {
                assert(win->alines[i]->sentinel == SENTINEL_VALUE);
@@ -105,5 +106,5 @@
            win, x, y);
 #endif
        lnp = win->alines[y];
-       return _cursesi_addwchar(win, &lnp, &y, &x, wch, 1);
+       return _cursesi_addwchar(win, &lnp, &(win->cury), &(win->curx), wch, 1);
 }
diff -r ca21f11c6218 -r de23dd927f13 lib/libcurses/add_wchstr.c
--- a/lib/libcurses/add_wchstr.c        Mon May 20 20:35:45 2019 +0000
+++ b/lib/libcurses/add_wchstr.c        Mon May 20 22:17:41 2019 +0000
@@ -1,4 +1,4 @@
-/*   $NetBSD: add_wchstr.c,v 1.6 2018/11/22 22:16:45 uwe Exp $ */
+/*   $NetBSD: add_wchstr.c,v 1.7 2019/05/20 22:17:41 blymn Exp $ */
 
 /*
  * Copyright (c) 2005 The NetBSD Foundation Inc.
@@ -36,7 +36,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: add_wchstr.c,v 1.6 2018/11/22 22:16:45 uwe Exp $");
+__RCSID("$NetBSD: add_wchstr.c,v 1.7 2019/05/20 22:17:41 blymn Exp $");
 #endif                         /* not lint */
 
 #include <stdlib.h>
@@ -120,7 +120,7 @@
 int
 mvwadd_wchnstr(WINDOW *win, int y, int x, const cchar_t *wchstr, int n)
 {
-       if (wmove(win, y, x) == ERR)
+       if (_cursesi_wmove(win, y, x, 0) == ERR)
                return ERR;
 
        return wadd_wchnstr(win, wchstr, n);
diff -r ca21f11c6218 -r de23dd927f13 lib/libcurses/addbytes.c
--- a/lib/libcurses/addbytes.c  Mon May 20 20:35:45 2019 +0000
+++ b/lib/libcurses/addbytes.c  Mon May 20 22:17:41 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: addbytes.c,v 1.50 2019/05/12 02:29:00 blymn Exp $      */
+/*     $NetBSD: addbytes.c,v 1.51 2019/05/20 22:17:41 blymn 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.50 2019/05/12 02:29:00 blymn Exp $");
+__RCSID("$NetBSD: addbytes.c,v 1.51 2019/05/20 22:17:41 blymn Exp $");
 #endif
 #endif                         /* not lint */
 
@@ -47,9 +47,9 @@
 #endif
 
 #define        SYNCH_IN        {y = win->cury; x = win->curx;}
-#define        SYNCH_OUT       {win->cury = y; win->curx = x;}
+#define        SYNCH_OUT       {win->cury = y; win->curx = x; win->ocury = y; win->ocurx = x;}
 #define        PSYNCH_IN       {*y = win->cury; *x = win->curx;}
-#define        PSYNCH_OUT      {win->cury = *y; win->curx = *x;}
+#define        PSYNCH_OUT      {win->cury = *y; win->curx = *x; win->ocury = *y; win->ocurx = *x;}
 
 #ifndef _CURSES_USE_MACROS
 
@@ -94,7 +94,7 @@
 mvwaddbytes(WINDOW *win, int y, int x, const char *bytes, int count)
 {
 
-       if (wmove(win, y, x) == ERR)
+       if (_cursesi_wmove(win, y, x, 0) == ERR)
                return ERR;
 
        return _cursesi_waddbytes(win, bytes, count, 0, 1);
@@ -241,12 +241,14 @@
                case '\r':
                        *x = 0;
                        win->curx = *x;
+                       win->ocurx = *x;
                        return OK;
 
                case '\b':
                        if (--(*x) < 0)
                                *x = 0;
                        win->curx = *x;
+                       win->ocurx = *x;
                        return OK;
                }
        }
@@ -362,10 +364,12 @@
                        if (--*x < 0)
                                *x = 0;
                        win->curx = *x;
+                       win->ocurx = *x;
                        return OK;
                case L'\r':
                        *x = 0;
                        win->curx = *x;
+                       win->ocurx = *x;
                        return OK;
                case L'\n':
                        wclrtoeol(win);
@@ -508,6 +512,7 @@
                (*lnp) = win->alines[*y];
        }
        win->cury = *y;
+       win->ocury = *y;
 
        /* add spacing character */
 #ifdef DEBUG
@@ -597,10 +602,11 @@
                }
                lp = &win->alines[*y]->line[0];
                (*lnp) = win->alines[*y];
-               win->curx = *x;
-               win->cury = *y;
+               win->curx = win->ocurx = *x;
+               win->cury = win->ocury = *y;
        } else {
                win->curx = *x;
+               win->ocurx = *x;
 
                /* clear the remining of the current characer */
                if (*x && *x < win->maxx) {
diff -r ca21f11c6218 -r de23dd927f13 lib/libcurses/addch.c
--- a/lib/libcurses/addch.c     Mon May 20 20:35:45 2019 +0000
+++ b/lib/libcurses/addch.c     Mon May 20 22:17:41 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: addch.c,v 1.19 2018/10/29 01:19:54 uwe Exp $   */
+/*     $NetBSD: addch.c,v 1.20 2019/05/20 22:17:41 blymn Exp $ */
 
 /*
  * Copyright (c) 1981, 1993, 1994
@@ -34,7 +34,7 @@
 #if 0
 static char sccsid[] = "@(#)addch.c    8.2 (Berkeley) 5/4/94";
 #else
-__RCSID("$NetBSD: addch.c,v 1.19 2018/10/29 01:19:54 uwe Exp $");
+__RCSID("$NetBSD: addch.c,v 1.20 2019/05/20 22:17:41 blymn Exp $");
 #endif
 #endif                         /* not lint */
 
@@ -74,7 +74,7 @@
 mvwaddch(WINDOW *win, int y, int x, chtype ch)
 {
 
-       if (wmove(win, y, x) == ERR)
+       if (_cursesi_wmove(win, y, x, 0) == ERR)
                return ERR;
 
        return waddch(win, ch);
diff -r ca21f11c6218 -r de23dd927f13 lib/libcurses/addchnstr.c
--- a/lib/libcurses/addchnstr.c Mon May 20 20:35:45 2019 +0000
+++ b/lib/libcurses/addchnstr.c Mon May 20 22:17:41 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: addchnstr.c,v 1.6 2013/11/09 11:16:59 blymn Exp $      */
+/*     $NetBSD: addchnstr.c,v 1.7 2019/05/20 22:17:41 blymn Exp $      */
 
 /*
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: addchnstr.c,v 1.6 2013/11/09 11:16:59 blymn Exp $");
+__RCSID("$NetBSD: addchnstr.c,v 1.7 2019/05/20 22:17:41 blymn Exp $");
 #endif                         /* not lint */
 
 #include <stdlib.h>
@@ -111,7 +111,7 @@
 int
 mvwaddchnstr(WINDOW *win, int y, int x, const chtype *chstr, int n)
 {
-       if (wmove(win, y, x) == ERR)
+       if (_cursesi_wmove(win, y, x, 0) == ERR)
                return ERR;
 
        return waddchnstr(win, chstr, n);
@@ -180,6 +180,6 @@
        *cp = '\0';
        ret = _cursesi_waddbytes(win, start, i, attr, 0);
        free(ocp);
-       wmove(win, oy, ox);
+       _cursesi_wmove(win, oy, ox, 1);
        return ret;
 }
diff -r ca21f11c6218 -r de23dd927f13 lib/libcurses/addnstr.c
--- a/lib/libcurses/addnstr.c   Mon May 20 20:35:45 2019 +0000
+++ b/lib/libcurses/addnstr.c   Mon May 20 22:17:41 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: addnstr.c,v 1.15 2017/01/06 13:53:18 roy Exp $ */
+/*     $NetBSD: addnstr.c,v 1.16 2019/05/20 22:17:41 blymn Exp $       */
 
 /*
  * Copyright (c) 1993, 1994
@@ -34,7 +34,7 @@
 #if 0
 static char sccsid[] = "@(#)addnstr.c  8.2 (Berkeley) 5/4/94";
 #else
-__RCSID("$NetBSD: addnstr.c,v 1.15 2017/01/06 13:53:18 roy Exp $");
+__RCSID("$NetBSD: addnstr.c,v 1.16 2019/05/20 22:17:41 blymn Exp $");
 #endif
 #endif                         /* not lint */
 
@@ -115,7 +115,7 @@
 int
 mvwaddnstr(WINDOW *win, int y, int x, const char *str, int count)
 {
-       if (wmove(win, y, x) == ERR)
+       if (_cursesi_wmove(win, y, x, 0) == ERR)
                return ERR;
 
        return waddnstr(win, str, count);
diff -r ca21f11c6218 -r de23dd927f13 lib/libcurses/addwstr.c
--- a/lib/libcurses/addwstr.c   Mon May 20 20:35:45 2019 +0000
+++ b/lib/libcurses/addwstr.c   Mon May 20 22:17:41 2019 +0000
@@ -1,4 +1,4 @@
-/*   $NetBSD: addwstr.c,v 1.4 2018/11/22 22:16:45 uwe Exp $ */
+/*   $NetBSD: addwstr.c,v 1.5 2019/05/20 22:17:41 blymn Exp $ */
 
 /*
  * Copyright (c) 2005 The NetBSD Foundation Inc.
@@ -36,7 +36,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: addwstr.c,v 1.4 2018/11/22 22:16:45 uwe Exp $");
+__RCSID("$NetBSD: addwstr.c,v 1.5 2019/05/20 22:17:41 blymn Exp $");
 #endif                                           /* not lint */
 
 #include <string.h>
@@ -114,7 +114,7 @@
 int
 mvwaddnwstr(WINDOW *win, int y, int x, const wchar_t *str, int count)
 {
-       if (wmove(win, y, x) == ERR)
+       if (_cursesi_wmove(win, y, x, 0) == ERR)
                return ERR;
 
        return waddnwstr(win, str, count);
diff -r ca21f11c6218 -r de23dd927f13 lib/libcurses/copywin.c
--- a/lib/libcurses/copywin.c   Mon May 20 20:35:45 2019 +0000
+++ b/lib/libcurses/copywin.c   Mon May 20 22:17:41 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: copywin.c,v 1.17 2017/01/06 13:53:18 roy Exp $ */
+/*     $NetBSD: copywin.c,v 1.18 2019/05/20 22:17:41 blymn Exp $       */
 
 /*-
  * Copyright (c) 1998-1999 Brett Lymn
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: copywin.c,v 1.17 2017/01/06 13:53:18 roy Exp $");
+__RCSID("$NetBSD: copywin.c,v 1.18 2019/05/20 22:17:41 blymn Exp $");
 #endif                         /* not lint */
 
 #include <ctype.h>
@@ -119,7 +119,7 @@
                         * background character



Home | Main Index | Thread Index | Old Index