support graphics if setup by somebody else.
[unix-history] / usr / src / usr.bin / window / wwlabel.c
CommitLineData
e7fe89d1 1#ifndef lint
f2a77fe1 2static 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 */
12wwlabel(w, f, where, l, mode)
0896e17e 13struct ww *w;
85af59e4
EW
14struct ww *f;
15char *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}