- else {
- cc = w->ww_buf[w->ww_scroll
- + w->ww_cur.r]
- [w->ww_cur.c].c_w = c;
- i = wwcurrow(w);
- j = wwcurcol(w);
- if (wwsmap[i][j] == w->ww_index) {
- wwtouched[i] = 1;
- cc = wwns[i][j].c_w = cc
- ^ w->ww_win[w->ww_cur.r]
- [w->ww_cur.c]
- << WWC_MSHIFT;
+ goto right;
+ }
+ i = w->ww_w.nc - w->ww_cur.c - 1;
+ bp = bq = &w->ww_buf[w->ww_scroll+w->ww_cur.r]
+ [w->ww_cur.c];
+ bp++->c_w = c | w->ww_modes << WWC_MSHIFT;
+ while (n > 0 && --i >= 0 && !ISCTRL(*p)) {
+ n--;
+ bp++->c_w = *p++ & 0x7f
+ | w->ww_modes << WWC_MSHIFT;
+ }
+ win = &w->ww_win[w->ww_cur.r][w->ww_cur.c];
+ i = wwcurrow(w);
+ j = wwcurcol(w);
+ smap = &wwsmap[i][j];
+ ns = &wwns[i][j];
+ touched = &wwtouched[i];
+ j = i = bp - bq;
+ bp = bq;
+ while (--i >= 0) {
+ if (*smap++ == w->ww_index) {
+ *touched = 1;
+ ns++->c_w = bp++->c_w
+ ^ *win++ << WWC_MSHIFT;
+ } else {
+ ns++;
+ bp++;
+ win++;