125076Sjaap #ifndef lint
2*25093Sjaap static char sccsid[] = "@(#)subr.c 1.2 (CWI) 85/10/02";
325076Sjaap #endif lint
425076Sjaap
525076Sjaap
6*25093Sjaap /*
7*25093Sjaap * variuos subroutines for f.i drawing horizontal lines
8*25093Sjaap *
9*25093Sjaap * We could stuff more routines in this file which are used in various modules
10*25093Sjaap * of tbl, like reg in misc.c etc. We leave this for later.
11*25093Sjaap */
1225076Sjaap
1325076Sjaap #include "defs.h"
1425076Sjaap #include "ext.h"
1525076Sjaap
ctype(il,ic)1625076Sjaap ctype(il, ic)
1725076Sjaap {
1825076Sjaap
1925076Sjaap if(instead[il])
2025076Sjaap return(0);
2125076Sjaap if(fullbot[il])
2225076Sjaap return(0);
2325076Sjaap il = stynum[il];
2425076Sjaap return(style[il][ic]);
2525076Sjaap }
2625076Sjaap
fspan(i,c)2725076Sjaap fspan(i, c)
2825076Sjaap {
2925076Sjaap
3025076Sjaap c++;
3125076Sjaap return(c < ncol && ctype (i, c) == 's');
3225076Sjaap }
3325076Sjaap
lspan(i,c)3425076Sjaap lspan(i, c)
3525076Sjaap {
36*25093Sjaap register int k;
3725076Sjaap
3825076Sjaap if(ctype(i, c) != 's')
3925076Sjaap return(0);
4025076Sjaap c++;
4125076Sjaap if(c < ncol && ctype(i, c) == 's')
4225076Sjaap return(0);
4325076Sjaap for(k = 0; ctype(i, --c) == 's'; k++)
4425076Sjaap ;
4525076Sjaap return(k);
4625076Sjaap }
4725076Sjaap
ctspan(i,c)4825076Sjaap ctspan(i, c)
4925076Sjaap {
50*25093Sjaap register int k;
5125076Sjaap
5225076Sjaap c++;
5325076Sjaap for(k = 1; c < ncol && ctype(i, c) == 's'; k++)
5425076Sjaap c++;
5525076Sjaap return(k);
5625076Sjaap }
5725076Sjaap
tohcol(ic)5825076Sjaap tohcol(ic)
5925076Sjaap {
6025076Sjaap if(ic == 0)
6125076Sjaap printf("\\h'|0'");
6225076Sjaap else
6325076Sjaap printf("\\h'(|\\n(%2su+|\\n(%2su)/2u'", reg(ic, CLEFT),
6425076Sjaap reg(ic - 1, CRIGHT));
6525076Sjaap }
6625076Sjaap
6725076Sjaap /*
6825076Sjaap * Return true if every element in line i is horizontal
6925076Sjaap * Also at least one must be horizontal
7025076Sjaap */
allh(i)7125076Sjaap allh(i)
7225076Sjaap {
73*25093Sjaap register int c, one, k;
7425076Sjaap
7525076Sjaap if(fullbot[i])
7625076Sjaap return(1);
7725076Sjaap for(one = c = 0; c < ncol; c++){
7825076Sjaap k = thish(i, c);
7925076Sjaap if(k == 0)
8025076Sjaap return(0);
8125076Sjaap if(k == 1)
8225076Sjaap continue;
8325076Sjaap one = 1;
8425076Sjaap }
8525076Sjaap return(one);
8625076Sjaap }
8725076Sjaap
thish(i,c)8825076Sjaap thish(i, c)
8925076Sjaap {
90*25093Sjaap register int t;
91*25093Sjaap register char *s;
92*25093Sjaap register struct colstr *pc;
9325076Sjaap
9425076Sjaap if(c < 0)
9525076Sjaap return(0);
9625076Sjaap if(i < 0)
9725076Sjaap return(0);
9825076Sjaap t = ctype(i, c);
9925076Sjaap if(t == '_' || t == '-')
10025076Sjaap return('-');
10125076Sjaap if(t == '=')
10225076Sjaap return('=');
10325076Sjaap if(t == '^')
10425076Sjaap return(1);
10525076Sjaap if(fullbot[i])
10625076Sjaap return(fullbot[i]);
10725076Sjaap if(t == 's')
10825076Sjaap return(thish (i, c - 1));
10925076Sjaap if(t == 0)
11025076Sjaap return(1);
11125076Sjaap pc = &table[i][c];
11225076Sjaap s = (t == 'a' ? pc -> rcol : pc -> col);
11325076Sjaap if(s == 0 || (point(s) && *s == 0))
11425076Sjaap return(1);
11525076Sjaap if(vspen(s))
11625076Sjaap return(1);
11725076Sjaap if(t = barent(s))
11825076Sjaap return(t);
11925076Sjaap return(0);
12025076Sjaap }
12125076Sjaap
12225076Sjaap
prefix(small,big)12325076Sjaap prefix(small, big)
12425076Sjaap char *small, *big;
12525076Sjaap {
12625076Sjaap register int c;
12725076Sjaap while ((c= *small++) == *big++)
12825076Sjaap if (c==0) return(1);
12925076Sjaap return(c==0);
13025076Sjaap }
131