Commit | Line | Data |
---|---|---|
e7fe89d1 | 1 | #ifndef lint |
f2a77fe1 | 2 | static char *sccsid = "@(#)wwlabel.c 3.7 83/09/15"; |
e7fe89d1 EW |
3 | #endif |
4 | ||
5 | #include "ww.h" | |
6 | ||
85af59e4 EW |
7 | /* |
8 | * Label window w on f, | |
9 | * at 1 line above w and 'where' columns from it's left edge. | |
10 | * Gross, but it works. | |
11 | */ | |
12 | wwlabel(w, f, where, l, mode) | |
0896e17e | 13 | struct ww *w; |
85af59e4 EW |
14 | struct ww *f; |
15 | char *l; | |
e7fe89d1 | 16 | { |
85af59e4 EW |
17 | int i; |
18 | register j; | |
d439a752 | 19 | register char *p; |
85af59e4 EW |
20 | register char *win; |
21 | register union ww_char *buf; | |
22 | register union ww_char *ns; | |
0896e17e | 23 | register char *fmap; |
861cd1ed | 24 | char *touched; |
e7fe89d1 | 25 | |
2357b64e | 26 | if (f->ww_fmap == 0) |
03e75950 | 27 | return; |
2357b64e | 28 | |
f2a77fe1 EW |
29 | i = w->ww_w.t - 1; |
30 | if (i < f->ww_i.t || i >= f->ww_i.b) | |
03e75950 | 31 | return; |
f2a77fe1 | 32 | j = w->ww_i.l + where; |
2357b64e | 33 | win = &f->ww_win[i][j]; |
f2a77fe1 | 34 | buf = &f->ww_buf[i][j]; |
2357b64e EW |
35 | fmap = &f->ww_fmap[i][j]; |
36 | ||
85af59e4 | 37 | ns = &wwns[i][j]; |
861cd1ed | 38 | touched = &wwtouched[i]; |
85af59e4 | 39 | |
f2a77fe1 | 40 | j = MIN(w->ww_i.r, f->ww_i.r) - j; |
85af59e4 | 41 | for (; j > 0 && *l;) |
0896e17e | 42 | for (p = unctrl(*l++); j > 0 && *p; j--) { |
85af59e4 | 43 | /* can't label if not already framed */ |
0896e17e | 44 | if (*win & WWM_GLS) { |
85af59e4 EW |
45 | p++; |
46 | buf++; | |
47 | ns++; | |
48 | win++; | |
0896e17e | 49 | fmap++; |
85af59e4 EW |
50 | } else if (*win & WWM_COV) { |
51 | buf++->c_w = mode << WWC_MSHIFT | *p++; | |
0896e17e | 52 | *fmap++ |= WWF_LABEL; |
85af59e4 EW |
53 | ns++; |
54 | win++; | |
0896e17e | 55 | } else { |
861cd1ed | 56 | *touched = 1; |
85af59e4 EW |
57 | ns++->c_w = (buf++->c_w |
58 | = mode << WWC_MSHIFT | *p++) | |
59 | ^ *win++ << WWC_MSHIFT; | |
0896e17e EW |
60 | *fmap++ |= WWF_LABEL; |
61 | } | |
85af59e4 | 62 | } |
e7fe89d1 | 63 | } |