|
|
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[] = "@(#)wwframe.c 3.20 (Berkeley) 6/6/90"; ! 25: #endif /* not lint */ ! 26: ! 27: #include "ww.h" ! 28: #include "tt.h" ! 29: ! 30: #define frameok(w, r, c) (w1 = wwindex[wwsmap[r][c]], \ ! 31: w1->ww_fmap || w1->ww_order > (w)->ww_order) ! 32: ! 33: wwframe(w, wframe) ! 34: register struct ww *w; ! 35: struct ww *wframe; ! 36: { ! 37: register r, c; ! 38: char a1, a2, a3; ! 39: char b1, b2, b3; ! 40: register char *smap; ! 41: register code; ! 42: register struct ww *w1; ! 43: ! 44: if (w->ww_w.t > 0) { ! 45: r = w->ww_w.t - 1; ! 46: c = w->ww_i.l - 1; ! 47: smap = &wwsmap[r + 1][c + 1]; ! 48: a1 = 0; ! 49: a2 = 0; ! 50: b1 = 0; ! 51: b2 = c < 0 || frameok(w, r, c); ! 52: ! 53: for (; c < w->ww_i.r; c++) { ! 54: if (c + 1 >= wwncol) { ! 55: a3 = 1; ! 56: b3 = 1; ! 57: } else { ! 58: a3 = w->ww_index == *smap++; ! 59: b3 = frameok(w, r, c + 1); ! 60: } ! 61: if (b2) { ! 62: code = 0; ! 63: if ((a1 || a2) && b1) ! 64: code |= WWF_L; ! 65: if ((a2 || a3) && b3) ! 66: code |= WWF_R; ! 67: if (code) ! 68: wwframec(wframe, r, c, code|WWF_TOP); ! 69: } ! 70: a1 = a2; ! 71: a2 = a3; ! 72: b1 = b2; ! 73: b2 = b3; ! 74: } ! 75: if ((a1 || a2) && b1 && b2) ! 76: wwframec(wframe, r, c, WWF_L|WWF_TOP); ! 77: } ! 78: ! 79: if (w->ww_w.b < wwnrow) { ! 80: r = w->ww_w.b; ! 81: c = w->ww_i.l - 1; ! 82: smap = &wwsmap[r - 1][c + 1]; ! 83: a1 = 0; ! 84: a2 = 0; ! 85: b1 = 0; ! 86: b2 = c < 0 || frameok(w, r, c); ! 87: ! 88: for (; c < w->ww_i.r; c++) { ! 89: if (c + 1 >= wwncol) { ! 90: a3 = 1; ! 91: b3 = 1; ! 92: } else { ! 93: a3 = w->ww_index == *smap++; ! 94: b3 = frameok(w, r, c + 1); ! 95: } ! 96: if (b2) { ! 97: code = 0; ! 98: if ((a1 || a2) && b1) ! 99: code |= WWF_L; ! 100: if ((a2 || a3) && b3) ! 101: code |= WWF_R; ! 102: if (code) ! 103: wwframec(wframe, r, c, code); ! 104: } ! 105: a1 = a2; ! 106: a2 = a3; ! 107: b1 = b2; ! 108: b2 = b3; ! 109: } ! 110: if ((a1 || a2) && b1 && b2) ! 111: wwframec(wframe, r, c, WWF_L); ! 112: } ! 113: ! 114: if (w->ww_w.l > 0) { ! 115: r = w->ww_i.t - 1; ! 116: c = w->ww_w.l - 1; ! 117: a1 = 0; ! 118: a2 = 0; ! 119: b1 = 0; ! 120: b2 = r < 0 || frameok(w, r, c); ! 121: ! 122: for (; r < w->ww_i.b; r++) { ! 123: if (r + 1 >= wwnrow) { ! 124: a3 = 1; ! 125: b3 = 1; ! 126: } else { ! 127: a3 = w->ww_index == wwsmap[r + 1][c + 1]; ! 128: b3 = frameok(w, r + 1, c); ! 129: } ! 130: if (b2) { ! 131: code = 0; ! 132: if ((a1 || a2) && b1) ! 133: code |= WWF_U; ! 134: if ((a2 || a3) && b3) ! 135: code |= WWF_D; ! 136: if (code) ! 137: wwframec(wframe, r, c, code); ! 138: } ! 139: a1 = a2; ! 140: a2 = a3; ! 141: b1 = b2; ! 142: b2 = b3; ! 143: } ! 144: if ((a1 || a2) && b1 && b2) ! 145: wwframec(wframe, r, c, WWF_U); ! 146: } ! 147: ! 148: if (w->ww_w.r < wwncol) { ! 149: r = w->ww_i.t - 1; ! 150: c = w->ww_w.r; ! 151: a1 = 0; ! 152: a2 = 0; ! 153: b1 = 0; ! 154: b2 = r < 0 || frameok(w, r, c); ! 155: ! 156: for (; r < w->ww_i.b; r++) { ! 157: if (r + 1 >= wwnrow) { ! 158: a3 = 1; ! 159: b3 = 1; ! 160: } else { ! 161: a3 = w->ww_index == wwsmap[r + 1][c - 1]; ! 162: b3 = frameok(w, r + 1, c); ! 163: } ! 164: if (b2) { ! 165: code = 0; ! 166: if ((a1 || a2) && b1) ! 167: code |= WWF_U; ! 168: if ((a2 || a3) && b3) ! 169: code |= WWF_D; ! 170: if (code) ! 171: wwframec(wframe, r, c, code); ! 172: } ! 173: a1 = a2; ! 174: a2 = a3; ! 175: b1 = b2; ! 176: b2 = b3; ! 177: } ! 178: if ((a1 || a2) && b1 && b2) ! 179: wwframec(wframe, r, c, WWF_U); ! 180: } ! 181: } ! 182: ! 183: wwframec(f, r, c, code) ! 184: register struct ww *f; ! 185: register r, c; ! 186: char code; ! 187: { ! 188: char oldcode; ! 189: register char *smap; ! 190: ! 191: if (r < f->ww_i.t || r >= f->ww_i.b || c < f->ww_i.l || c >= f->ww_i.r) ! 192: return; ! 193: ! 194: smap = &wwsmap[r][c]; ! 195: ! 196: { ! 197: register struct ww *w; ! 198: ! 199: w = wwindex[*smap]; ! 200: if (w->ww_order > f->ww_order) { ! 201: if (w != &wwnobody && w->ww_win[r][c] == 0) ! 202: w->ww_nvis[r]--; ! 203: *smap = f->ww_index; ! 204: } ! 205: } ! 206: ! 207: if (f->ww_fmap != 0) { ! 208: register char *fmap; ! 209: ! 210: fmap = &f->ww_fmap[r][c]; ! 211: oldcode = *fmap; ! 212: *fmap |= code; ! 213: if (code & WWF_TOP) ! 214: *fmap &= ~WWF_LABEL; ! 215: code = *fmap; ! 216: } else ! 217: oldcode = 0; ! 218: { ! 219: register char *win = &f->ww_win[r][c]; ! 220: ! 221: if (*win == WWM_GLS && *smap == f->ww_index) ! 222: f->ww_nvis[r]++; ! 223: *win &= ~WWM_GLS; ! 224: } ! 225: if (oldcode != code && (code & WWF_LABEL) == 0) { ! 226: register short frame; ! 227: ! 228: frame = tt.tt_frame[code & WWF_MASK]; ! 229: f->ww_buf[r][c].c_w = frame; ! 230: if (wwsmap[r][c] == f->ww_index) { ! 231: wwtouched[r] |= WWU_TOUCHED; ! 232: wwns[r][c].c_w = frame; ! 233: } ! 234: } ! 235: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.