date and time created 83/08/05 13:34:37 by sam
[unix-history] / usr / src / old / eqn / common_source / pile.c
CommitLineData
6f1a2a65 1/* pile.c 4.2 83/02/12 */
32b159e6
BS
2
3# include "e.h"
4
5lpile(type, p1, p2) int type, p1, p2; {
6 int bi, hi, i, gap, h, b, nlist, nlist2, mid;
7 yyval = oalloc();
6f1a2a65 8#ifndef NEQN
32b159e6 9 gap = VERT( (ps*6*4)/10 ); /* 4/10 m between blocks */
6f1a2a65
BS
10#else NEQN
11 gap = VERT(1);
12#endif NEQN
32b159e6
BS
13 if( type=='-' ) gap = 0;
14 nlist = p2 - p1;
15 nlist2 = (nlist+1)/2;
16 mid = p1 + nlist2 -1;
17 h = 0;
18 for( i=p1; i<p2; i++ )
19 h += eht[lp[i]];
20 eht[yyval] = h + (nlist-1)*gap;
21 b = 0;
22 for( i=p2-1; i>mid; i-- )
23 b += eht[lp[i]] + gap;
24 ebase[yyval] = (nlist%2) ? b + ebase[lp[mid]]
6f1a2a65 25#ifndef NEQN
32b159e6 26 : b - VERT( (ps*6*5)/10 ) - gap;
6f1a2a65
BS
27#else NEQN
28 : b - VERT(1) - gap;
29#endif NEQN
32b159e6
BS
30 if(dbg) {
31 printf(".\tS%d <- %c pile of:", yyval, type);
32 for( i=p1; i<p2; i++)
33 printf(" S%d", lp[i]);
34 printf(";h=%d b=%d\n", eht[yyval], ebase[yyval]);
35 }
36 nrwid(lp[p1], ps, lp[p1]);
37 printf(".nr %d \\n(%d\n", yyval, lp[p1]);
38 for( i = p1+1; i<p2; i++ ) {
39 nrwid(lp[i], ps, lp[i]);
40 printf(".if \\n(%d>\\n(%d .nr %d \\n(%d\n",
41 lp[i], yyval, yyval, lp[i]);
42 }
43 printf(".ds %d \\v'%du'\\h'%du*\\n(%du'\\\n", yyval, ebase[yyval],
44 type=='R' ? 1 : 0, yyval);
45 for(i = p2-1; i >=p1; i--) {
46 hi = eht[lp[i]];
47 bi = ebase[lp[i]];
48 switch(type) {
49
50 case 'L':
51 printf("\\v'%du'\\*(%d\\h'-\\n(%du'\\v'0-%du'\\\n",
52 -bi, lp[i], lp[i], hi-bi+gap);
53 continue;
54 case 'R':
55 printf("\\v'%du'\\h'-\\n(%du'\\*(%d\\v'0-%du'\\\n",
56 -bi, lp[i], lp[i], hi-bi+gap);
57 continue;
58 case 'C':
59 case '-':
60 printf("\\v'%du'\\h'\\n(%du-\\n(%du/2u'\\*(%d",
61 -bi, yyval, lp[i], lp[i]);
62 printf("\\h'-\\n(%du-\\n(%du/2u'\\v'0-%du'\\\n",
63 yyval, lp[i], hi-bi+gap);
64 continue;
65 }
66 }
67 printf("\\v'%du'\\h'%du*\\n(%du'\n", eht[yyval]-ebase[yyval]+gap,
68 type!='R' ? 1 : 0, yyval);
69 for( i=p1; i<p2; i++ )
70 ofree(lp[i]);
71 lfont[yyval] = rfont[yyval] = 0;
72}