- if (w->ww_i.nrow == w->ww_w.nrow) /* not framed */
- return -1;
- Wauxcursor(w->ww_win, 0, where);
- for (i = w->ww_o.ncol - where - 1; i > 0 && *l; l++)
- for (p = unctrl(*l); *p; p++, i--)
- Waputc(*p, mode, w->ww_win);
+ if (f->ww_fmap == 0)
+ return;
+
+ row = w->ww_w.t - 1;
+ if (row < f->ww_i.t || row >= f->ww_i.b)
+ return;
+ win = f->ww_win[row];
+ buf = f->ww_buf[row];
+ fmap = f->ww_fmap[row];
+ ns = wwns[row];
+ smap = wwsmap[row];
+ touched = wwtouched[row];
+ mode <<= WWC_MSHIFT;
+
+ jj = MIN(w->ww_i.r, f->ww_i.r);
+ j = w->ww_i.l + where;
+ while (j < jj && *l)
+ for (p = unctrl(*l++); j < jj && *p; j++, p++) {
+ /* can't label if not already framed */
+ if (win[j] & WWM_GLS)
+ continue;
+ if (smap[j] != f->ww_index)
+ buf[j].c_w = mode | *p;
+ else {
+ ns[j].c_w = (buf[j].c_w = mode | *p)
+ ^ win[j] << WWC_MSHIFT;
+ touched |= WWU_TOUCHED;
+ }
+ fmap[j] |= WWF_LABEL;
+ }
+ wwtouched[row] = touched;