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