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