static const char *glibe(int i, int c, int cl, int cr, int lintype) { const char *s = NULL; int tl, bl; int cx = c == cl ? 0 : c == cr ? 2 : 1 ; lintype = lintype == '=' ? 1 : 0; if (!i) { bl = lefdata(1, c); if (bl >= 1 && bl <= 2) s = tlp ? "+" : udbdc[lintype][0][bl][cx]; } else if (i < nlin - 1) { tl = lefdata(i - 1, c); bl = lefdata(i + 1, c); if (tl >= 0 && tl <= 2 && bl >= 0 && bl <= 2) { if (tlp) { if (tl || bl) s = "+"; } else s = udbdc[lintype][tl][bl][cx]; } } else { tl = lefdata(i - 1, c); if (tl >= 1 && tl <= 2) s = tlp ? "+" : udbdc[lintype][tl][0][cx]; } return s; }
int interv(int i, int c) { int ku, kl; if (c>=ncol || c == 0) { if (dboxflg) { if (i==0) return(BOT); if (i>=nlin) return(TOP); return(THRU); } if (c>=ncol) return(0); } ku = i>0 ? lefdata(i-1,c) : 0; if (i+1 >= nlin) kl=0; else kl = lefdata(allh(i) ? i+1 : i, c); if (ku==2 && kl==2) return(THRU); if (ku ==2) return(TOP); if (kl==BOT) return(2); return(0); }
int left(int i, int c, int *lwidp) { int kind, li, lj; /* returns -1 if no line to left */ /* returns number of line where it starts */ /* stores into lwid the kind of line */ *lwidp = 0; if (i < 0) return(-1); kind = lefdata(i, c); if (kind == 0) return(-1); if (i + 1 < nlin) if (lefdata(next(i), c) == kind) return(-1); li = i; while (i >= 0 && lefdata(i, c) == kind) i = prev(li = i); if (prev(li) == -1) li = 0; *lwidp = kind; for (lj = i + 1; lj < li; lj++) if (instead[lj] && strcmp(instead[lj], ".TH") == 0) return(li); for (i = i + 1; i < li; i++) if (fullbot[i]) li = i; return(li); }