113984Sedward #ifndef lint 2*14773Sedward static char *sccsid = "@(#)wwlabel.c 3.5 83/08/19"; 313984Sedward #endif 413984Sedward 513984Sedward #include "ww.h" 613984Sedward 714415Sedward /* 814415Sedward * Label window w on f, 914415Sedward * at 1 line above w and 'where' columns from it's left edge. 1014415Sedward * Gross, but it works. 1114415Sedward */ 1214415Sedward wwlabel(w, f, where, l, mode) 1314591Sedward struct ww *w; 1414415Sedward struct ww *f; 1514415Sedward char *l; 1613984Sedward { 1714415Sedward int i; 1814415Sedward register j; 1914172Sedward register char *p; 2014415Sedward register char *win; 2114415Sedward register union ww_char *buf; 2214415Sedward register union ww_char *ns; 2314591Sedward register char *fmap; 2414663Sedward char *touched; 2513984Sedward 26*14773Sedward if (f->ww_fmap == 0) 2714172Sedward return -1; 28*14773Sedward 29*14773Sedward i = w->ww_w.t - 1 - f->ww_w.t; 30*14773Sedward if (i < 0) 31*14773Sedward return -1; 32*14773Sedward j = w->ww_w.l + where - f->ww_w.l; 33*14773Sedward if (j < 0) 34*14773Sedward j = 0; 35*14773Sedward win = &f->ww_win[i][j]; 36*14773Sedward buf = &f->ww_buf[f->ww_scroll + i][j]; 37*14773Sedward fmap = &f->ww_fmap[i][j]; 38*14773Sedward 3914415Sedward i += f->ww_w.t; 40*14773Sedward j += f->ww_w.l; 4114415Sedward ns = &wwns[i][j]; 4214663Sedward touched = &wwtouched[i]; 43*14773Sedward 4414415Sedward j = MIN(w->ww_w.r, f->ww_w.r) - j; 4514415Sedward for (; j > 0 && *l;) 4614591Sedward for (p = unctrl(*l++); j > 0 && *p; j--) { 4714415Sedward /* can't label if not already framed */ 4814591Sedward if (*win & WWM_GLS) { 4914415Sedward p++; 5014415Sedward buf++; 5114415Sedward ns++; 5214415Sedward win++; 5314591Sedward fmap++; 5414415Sedward } else if (*win & WWM_COV) { 5514415Sedward buf++->c_w = mode << WWC_MSHIFT | *p++; 5614591Sedward *fmap++ |= WWF_LABEL; 5714415Sedward ns++; 5814415Sedward win++; 5914591Sedward } else { 6014663Sedward *touched = 1; 6114415Sedward ns++->c_w = (buf++->c_w 6214415Sedward = mode << WWC_MSHIFT | *p++) 6314415Sedward ^ *win++ << WWC_MSHIFT; 6414591Sedward *fmap++ |= WWF_LABEL; 6514591Sedward } 6614415Sedward } 6714415Sedward 6814415Sedward return 0; 6913984Sedward } 70