Commit | Line | Data |
---|---|---|
16f3713b TL |
1 | #include "e.h" |
2 | ||
3 | column(type, p1) int type, p1; { | |
4 | int i; | |
5 | ||
6 | lp[p1] = ct - p1 - 1; | |
7 | if( dbg ){ | |
8 | printf(".\t%d column of", type); | |
9 | for( i=p1+1; i<ct; i++ ) | |
10 | printf(" S%d", lp[i]); | |
11 | printf(", rows=%d\n",lp[p1]); | |
12 | } | |
13 | lp[ct++] = type; | |
14 | } | |
15 | ||
16 | matrix(p1) int p1; { | |
17 | int nrow, ncol, i, j, k, hb, b, val[100]; | |
18 | char *space; | |
19 | ||
20 | space = "\\ \\ "; | |
21 | nrow = lp[p1]; /* disaster if rows inconsistent */ | |
22 | ncol = 0; | |
23 | for( i=p1; i<ct; i += lp[i]+2 ){ | |
24 | ncol++; | |
25 | if(dbg)printf(".\tcolct=%d\n",lp[i]); | |
26 | } | |
27 | for( k=1; k<=nrow; k++ ) { | |
28 | hb = b = 0; | |
29 | j = p1 + k; | |
30 | for( i=0; i<ncol; i++ ) { | |
31 | hb = max(hb, eht[lp[j]]-ebase[lp[j]]); | |
32 | b = max(b, ebase[lp[j]]); | |
33 | j += nrow + 2; | |
34 | } | |
35 | if(dbg)printf(".\trow %d: b=%d, hb=%d\n", k, b, hb); | |
36 | j = p1 + k; | |
37 | for( i=0; i<ncol; i++ ) { | |
38 | ebase[lp[j]] = b; | |
39 | eht[lp[j]] = b + hb; | |
40 | j += nrow + 2; | |
41 | } | |
42 | } | |
43 | j = p1; | |
44 | for( i=0; i<ncol; i++ ) { | |
45 | lpile(lp[j+lp[j]+1], j+1, j+lp[j]+1); | |
46 | val[i] = yyval; | |
47 | j += nrow + 2; | |
48 | } | |
49 | yyval = oalloc(); | |
50 | eht[yyval] = eht[val[0]]; | |
51 | ebase[yyval] = ebase[val[0]]; | |
52 | lfont[yyval] = rfont[yyval] = 0; | |
53 | if(dbg)printf(".\tmatrix S%d: r=%d, c=%d, h=%d, b=%d\n", | |
54 | yyval,nrow,ncol,eht[yyval],ebase[yyval]); | |
55 | printf(".ds %d \"", yyval); | |
56 | for( i=0; i<ncol; i++ ) { | |
57 | printf("\\*(%d%s", val[i], i==ncol-1 ? "" : space); | |
58 | ofree(val[i]); | |
59 | } | |
60 | printf("\n"); | |
61 | ct = p1; | |
62 | } |