113984Sedward #ifndef lint 2*14415Sedward static char *sccsid = "@(#)wwlabel.c 2.1.1.1 83/08/09"; 313984Sedward #endif 413984Sedward 513984Sedward #include "ww.h" 613984Sedward 7*14415Sedward char **wwfmap; 8*14415Sedward #define U 1 9*14415Sedward #define R 2 10*14415Sedward #define D 4 11*14415Sedward #define L 8 12*14415Sedward 13*14415Sedward /* 14*14415Sedward * Label window w on f, 15*14415Sedward * at 1 line above w and 'where' columns from it's left edge. 16*14415Sedward * Gross, but it works. 17*14415Sedward */ 18*14415Sedward wwlabel(w, f, where, l, mode) 1913984Sedward register struct ww *w; 20*14415Sedward struct ww *f; 21*14415Sedward char *l; 2213984Sedward { 23*14415Sedward int i; 24*14415Sedward register j; 2514172Sedward register char *p; 26*14415Sedward register char *win; 27*14415Sedward register union ww_char *buf; 28*14415Sedward register union ww_char *ns; 29*14415Sedward char *fmap; 3013984Sedward 31*14415Sedward if ((i = w->ww_w.t - 1 - f->ww_w.t) < 0) 3214172Sedward return -1; 33*14415Sedward j = w->ww_w.l + where; 34*14415Sedward j = MAX(j, f->ww_w.l); 35*14415Sedward win = &f->ww_win[i][j - f->ww_w.l]; 36*14415Sedward buf = &f->ww_buf[w->ww_scroll + i][j - f->ww_w.l]; 37*14415Sedward i += f->ww_w.t; 38*14415Sedward ns = &wwns[i][j]; 39*14415Sedward fmap = &wwfmap[i][j]; 40*14415Sedward j = MIN(w->ww_w.r, f->ww_w.r) - j; 41*14415Sedward 42*14415Sedward for (; j > 0 && *l;) 43*14415Sedward for (p = unctrl(*l++); j > 0 && *p; j--, fmap++) { 44*14415Sedward /* can't label if not already framed */ 45*14415Sedward if (*win & WWM_GLS || (*fmap & (U|D)) == (U|D)) { 46*14415Sedward p++; 47*14415Sedward buf++; 48*14415Sedward ns++; 49*14415Sedward win++; 50*14415Sedward } else if (*win & WWM_COV) { 51*14415Sedward buf++->c_w = mode << WWC_MSHIFT | *p++; 52*14415Sedward ns++; 53*14415Sedward win++; 54*14415Sedward } else 55*14415Sedward ns++->c_w = (buf++->c_w 56*14415Sedward = mode << WWC_MSHIFT | *p++) 57*14415Sedward ^ *win++ << WWC_MSHIFT; 58*14415Sedward } 59*14415Sedward 60*14415Sedward return 0; 6113984Sedward } 62