|
|
1.1 root 1: /*
2: * Copyright (c) 1983 Regents of the University of California.
3: * All rights reserved.
4: *
5: * This code is derived from software contributed to Berkeley by
6: * Edward Wang at The University of California, Berkeley.
7: *
8: * Redistribution and use in source and binary forms are permitted provided
9: * that: (1) source distributions retain this entire copyright notice and
10: * comment, and (2) distributions including binaries display the following
11: * acknowledgement: ``This product includes software developed by the
12: * University of California, Berkeley and its contributors'' in the
13: * documentation or other materials provided with the distribution and in
14: * all advertising materials mentioning features or use of this software.
15: * Neither the name of the University nor the names of its contributors may
16: * be used to endorse or promote products derived from this software without
17: * specific prior written permission.
18: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
19: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
20: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
21: */
22:
23: #ifndef lint
24: static char sccsid[] = "@(#)wwlabel.c 3.17 (Berkeley) 6/6/90";
25: #endif /* not lint */
26:
27: #include "ww.h"
28: #include "char.h"
29:
30: /*
31: * Label window w on f,
32: * at 1 line above w and 'where' columns from it's left edge.
33: * Gross, but it works.
34: */
35: wwlabel(w, f, where, l, mode)
36: struct ww *w;
37: struct ww *f;
38: char *l;
39: {
40: int row;
41: register j;
42: int jj;
43: register char *win;
44: register union ww_char *buf;
45: register union ww_char *ns;
46: register char *fmap;
47: register char *smap;
48: char touched;
49: char *p;
50:
51: if (f->ww_fmap == 0)
52: return;
53:
54: row = w->ww_w.t - 1;
55: if (row < f->ww_i.t || row >= f->ww_i.b)
56: return;
57: win = f->ww_win[row];
58: buf = f->ww_buf[row];
59: fmap = f->ww_fmap[row];
60: ns = wwns[row];
61: smap = wwsmap[row];
62: touched = wwtouched[row];
63: mode <<= WWC_MSHIFT;
64:
65: jj = MIN(w->ww_i.r, f->ww_i.r);
66: j = w->ww_i.l + where;
67: while (j < jj && *l)
68: for (p = unctrl(*l++); j < jj && *p; j++, p++) {
69: /* can't label if not already framed */
70: if (win[j] & WWM_GLS)
71: continue;
72: if (smap[j] != f->ww_index)
73: buf[j].c_w = mode | *p;
74: else {
75: ns[j].c_w = (buf[j].c_w = mode | *p)
76: ^ win[j] << WWC_MSHIFT;
77: touched |= WWU_TOUCHED;
78: }
79: fmap[j] |= WWF_LABEL;
80: }
81: wwtouched[row] = touched;
82: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.