118736Sedward /* 233514Sbostic * Copyright (c) 1983 Regents of the University of California. 333514Sbostic * All rights reserved. 433514Sbostic * 5*42835Sbostic * %sccs.include.redist.c% 618736Sedward */ 718736Sedward 833514Sbostic #ifndef lint 9*42835Sbostic static char sccsid[] = "@(#)wwlabel.c 3.16 (Berkeley) 06/02/90"; 1033514Sbostic #endif /* not lint */ 1133514Sbostic 1213984Sedward #include "ww.h" 1316309Sedward #include "char.h" 1413984Sedward 1514415Sedward /* 1614415Sedward * Label window w on f, 1714415Sedward * at 1 line above w and 'where' columns from it's left edge. 1814415Sedward * Gross, but it works. 1914415Sedward */ 2014415Sedward wwlabel(w, f, where, l, mode) 2114591Sedward struct ww *w; 2214415Sedward struct ww *f; 2314415Sedward char *l; 2413984Sedward { 2515635Sedward int row; 2614415Sedward register j; 2715635Sedward int jj; 2814415Sedward register char *win; 2914415Sedward register union ww_char *buf; 3014415Sedward register union ww_char *ns; 3114591Sedward register char *fmap; 3215635Sedward register char *smap; 3315635Sedward char touched; 3415635Sedward char *p; 3513984Sedward 3614773Sedward if (f->ww_fmap == 0) 3714858Sedward return; 3814773Sedward 3915635Sedward row = w->ww_w.t - 1; 4015635Sedward if (row < f->ww_i.t || row >= f->ww_i.b) 4114858Sedward return; 4215635Sedward win = f->ww_win[row]; 4315635Sedward buf = f->ww_buf[row]; 4415635Sedward fmap = f->ww_fmap[row]; 4515635Sedward ns = wwns[row]; 4615635Sedward smap = wwsmap[row]; 4715635Sedward touched = wwtouched[row]; 4815635Sedward mode <<= WWC_MSHIFT; 4915635Sedward 5015635Sedward jj = MIN(w->ww_i.r, f->ww_i.r); 5114987Sedward j = w->ww_i.l + where; 5215635Sedward while (j < jj && *l) 5315635Sedward for (p = unctrl(*l++); j < jj && *p; j++, p++) { 5414415Sedward /* can't label if not already framed */ 5515635Sedward if (win[j] & WWM_GLS) 5615635Sedward continue; 5715635Sedward if (smap[j] != f->ww_index) 5815635Sedward buf[j].c_w = mode | *p; 5915635Sedward else { 6015635Sedward ns[j].c_w = (buf[j].c_w = mode | *p) 6115635Sedward ^ win[j] << WWC_MSHIFT; 6215654Sedward touched |= WWU_TOUCHED; 6314591Sedward } 6415635Sedward fmap[j] |= WWF_LABEL; 6514415Sedward } 6615635Sedward wwtouched[row] = touched; 6713984Sedward } 68