insert mode bug fix and cleanup
[unix-history] / usr / src / usr.bin / window / wwinschar.c
index 209ff16..715a2da 100644 (file)
@@ -3,15 +3,20 @@
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms are permitted
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms are permitted
- * provided that this notice is preserved and that due credit is given
- * to the University of California at Berkeley. The name of the University
- * may not be used to endorse or promote products derived from this
- * software without specific prior written permission. This software
- * is provided ``as is'' without express or implied warranty.
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by the University of California, Berkeley.  The name of the
+ * University may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)wwinschar.c        3.15 (Berkeley) %G%";
+static char sccsid[] = "@(#)wwinschar.c        3.18 (Berkeley) %G%";
 #endif /* not lint */
 
 #include "ww.h"
 #endif /* not lint */
 
 #include "ww.h"
@@ -87,19 +92,14 @@ short c;
        /*
         * Can/Should we use delete character?
         */
        /*
         * Can/Should we use delete character?
         */
-       if (tt.tt_hasinsert && nvis > (wwncol - col) / 2) {
+       if ((tt.tt_inschar || tt.tt_setinsert) && nvis > (wwncol - col) / 2) {
                register union ww_char *p, *q;
 
                register union ww_char *p, *q;
 
-               tt.tt_ninsert = 1;
-               tt.tt_nmodes = c >> WWC_MSHIFT & tt.tt_availmodes;
-               (*tt.tt_move)(row, col);
-               (*tt.tt_putc)(c & WWC_CMASK);
-               tt.tt_ninsert = 0;
-
+               xxinschar(row, col, c & wwavailmodes << WWC_MSHIFT);
                p = &wwos[row][wwncol];
                q = p - 1;
                for (i = wwncol - col; --i > 0;)
                        *--p = *--q;
                p = &wwos[row][wwncol];
                q = p - 1;
                for (i = wwncol - col; --i > 0;)
                        *--p = *--q;
-               q->c_w = c;
+               q->c_w = tt.tt_setinsert ? c : ' ';
        }
 }
        }
 }