+ while (n > 0) {
+ if (w->ww_wstate == 0 && !ISCTRL(*p)) {
+ register i;
+ register union ww_char *bp;
+ union ww_char *bq;
+ int col;
+
+ if (w->ww_insert) {
+ n--;
+ wwinschar(w, w->ww_cur.r, w->ww_cur.c,
+ *p++ | w->ww_modes << WWC_MSHIFT);
+ goto right;
+ }
+
+ bp = bq = &w->ww_buf[w->ww_cur.r][w->ww_cur.c];
+ if ((i = w->ww_b.r - w->ww_cur.c) > n)
+ i = n;
+ while (--i >= 0 && !ISCTRL(*p))
+ bp++->c_w = *p++ | w->ww_modes << WWC_MSHIFT;
+
+ i = bp - bq;
+ n -= i;
+ col = w->ww_cur.c;
+ w->ww_cur.c += i;
+ bp = bq;
+ if (col < w->ww_i.l) {
+ /* use col as a temporary */
+ col = w->ww_i.l - col;
+ bp += col;
+ i -= col;
+ col = w->ww_i.l;
+ }
+ if (i > w->ww_i.r - col)
+ i = w->ww_i.r - col;
+
+ if (w->ww_cur.r >= w->ww_i.t && w->ww_cur.r < w->ww_i.b)
+ {