113984Sedward #ifndef lint 2*18736Sedward static char sccsid[] = "@(#)wwlabel.c 3.13 04/24/85"; 313984Sedward #endif 413984Sedward 5*18736Sedward /* 6*18736Sedward * Copyright (c) 1983 Regents of the University of California, 7*18736Sedward * All rights reserved. Redistribution permitted subject to 8*18736Sedward * the terms of the Berkeley Software License Agreement. 9*18736Sedward */ 10*18736Sedward 1113984Sedward #include "ww.h" 1216309Sedward #include "char.h" 1313984Sedward 1414415Sedward /* 1514415Sedward * Label window w on f, 1614415Sedward * at 1 line above w and 'where' columns from it's left edge. 1714415Sedward * Gross, but it works. 1814415Sedward */ 1914415Sedward wwlabel(w, f, where, l, mode) 2014591Sedward struct ww *w; 2114415Sedward struct ww *f; 2214415Sedward char *l; 2313984Sedward { 2415635Sedward int row; 2514415Sedward register j; 2615635Sedward int jj; 2714415Sedward register char *win; 2814415Sedward register union ww_char *buf; 2914415Sedward register union ww_char *ns; 3014591Sedward register char *fmap; 3115635Sedward register char *smap; 3215635Sedward char touched; 3315635Sedward char *p; 3413984Sedward 3514773Sedward if (f->ww_fmap == 0) 3614858Sedward return; 3714773Sedward 3815635Sedward row = w->ww_w.t - 1; 3915635Sedward if (row < f->ww_i.t || row >= f->ww_i.b) 4014858Sedward return; 4115635Sedward win = f->ww_win[row]; 4215635Sedward buf = f->ww_buf[row]; 4315635Sedward fmap = f->ww_fmap[row]; 4415635Sedward ns = wwns[row]; 4515635Sedward smap = wwsmap[row]; 4615635Sedward touched = wwtouched[row]; 4715635Sedward mode <<= WWC_MSHIFT; 4815635Sedward 4915635Sedward jj = MIN(w->ww_i.r, f->ww_i.r); 5014987Sedward j = w->ww_i.l + where; 5115635Sedward while (j < jj && *l) 5215635Sedward for (p = unctrl(*l++); j < jj && *p; j++, p++) { 5314415Sedward /* can't label if not already framed */ 5415635Sedward if (win[j] & WWM_GLS) 5515635Sedward continue; 5615635Sedward if (smap[j] != f->ww_index) 5715635Sedward buf[j].c_w = mode | *p; 5815635Sedward else { 5915635Sedward ns[j].c_w = (buf[j].c_w = mode | *p) 6015635Sedward ^ win[j] << WWC_MSHIFT; 6115654Sedward touched |= WWU_TOUCHED; 6214591Sedward } 6315635Sedward fmap[j] |= WWF_LABEL; 6414415Sedward } 6515635Sedward wwtouched[row] = touched; 6613984Sedward } 67