113984Sedward #ifndef lint 2*14663Sedward static char *sccsid = "@(#)wwlabel.c 3.3 83/08/16"; 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; 24*14663Sedward char *touched; 2513984Sedward 2614415Sedward if ((i = w->ww_w.t - 1 - f->ww_w.t) < 0) 2714172Sedward return -1; 2814415Sedward j = w->ww_w.l + where; 2914415Sedward j = MAX(j, f->ww_w.l); 3014415Sedward win = &f->ww_win[i][j - f->ww_w.l]; 3114415Sedward buf = &f->ww_buf[w->ww_scroll + i][j - f->ww_w.l]; 3214415Sedward i += f->ww_w.t; 3314415Sedward ns = &wwns[i][j]; 3414415Sedward fmap = &wwfmap[i][j]; 35*14663Sedward touched = &wwtouched[i]; 3614415Sedward j = MIN(w->ww_w.r, f->ww_w.r) - j; 3714415Sedward 3814415Sedward for (; j > 0 && *l;) 3914591Sedward for (p = unctrl(*l++); j > 0 && *p; j--) { 4014415Sedward /* can't label if not already framed */ 4114591Sedward if (*win & WWM_GLS) { 4214415Sedward p++; 4314415Sedward buf++; 4414415Sedward ns++; 4514415Sedward win++; 4614591Sedward fmap++; 4714415Sedward } else if (*win & WWM_COV) { 4814415Sedward buf++->c_w = mode << WWC_MSHIFT | *p++; 4914591Sedward *fmap++ |= WWF_LABEL; 5014415Sedward ns++; 5114415Sedward win++; 5214591Sedward } else { 53*14663Sedward *touched = 1; 5414415Sedward ns++->c_w = (buf++->c_w 5514415Sedward = mode << WWC_MSHIFT | *p++) 5614415Sedward ^ *win++ << WWC_MSHIFT; 5714591Sedward *fmap++ |= WWF_LABEL; 5814591Sedward } 5914415Sedward } 6014415Sedward 6114415Sedward return 0; 6213984Sedward } 63