Index: external/bsd/nvi/dist/cl/cl_main.c
===================================================================
RCS file: /cvsroot/src/external/bsd/nvi/dist/cl/cl_main.c,v
retrieving revision 1.5
diff -p -u -r1.5 cl_main.c
--- external/bsd/nvi/dist/cl/cl_main.c  25 Nov 2015 20:25:20 -0000      1.5
+++ external/bsd/nvi/dist/cl/cl_main.c  27 Aug 2017 13:25:20 -0000
@@ -311,6 +311,10 @@ h_winch(int signo)
               continue;

       F_SET(clp, CL_SIGWINCH);
+
+       /* If there was a previous handler, call that. */
+       if (clp->oact[INDX_WINCH].sa_handler)
+               clp->oact[INDX_WINCH].sa_handler(signo);
}
#undef GLOBAL_CLP

Index: external/bsd/nvi/dist/cl/cl_screen.c
===================================================================
RCS file: /cvsroot/src/external/bsd/nvi/dist/cl/cl_screen.c,v
retrieving revision 1.5
diff -p -u -r1.5 cl_screen.c
--- external/bsd/nvi/dist/cl/cl_screen.c        25 Nov 2015 20:25:20 -0000      1.5
+++ external/bsd/nvi/dist/cl/cl_screen.c        27 Aug 2017 13:25:20 -0000
@@ -430,7 +430,7 @@ cl_vi_end(GS *gp)
        * Move to the bottom of the window (some endwin implementations don't
        * do this for you).
        */
-       if (!F_ISSET(clp, CL_IN_EX)) {
+       if (!F_ISSET(clp, CL_IN_EX) && !F_ISSET(gp, G_SRESTART)) {
               (void)move(0, 0);
               (void)deleteln();
               (void)move(LINES - 1, 0);