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