1*14486Ssam #ifndef lint 2*14486Ssam static char sccsid[] = "@(#)pile.c 4.3 08/11/83"; 3*14486Ssam #endif 411015Sshannon 511015Sshannon # include "e.h" 611015Sshannon 711015Sshannon lpile(type, p1, p2) int type, p1, p2; { 811015Sshannon int bi, hi, i, gap, h, b, nlist, nlist2, mid; 911015Sshannon yyval = oalloc(); 1011023Sshannon #ifndef NEQN 1111015Sshannon gap = VERT( (ps*6*4)/10 ); /* 4/10 m between blocks */ 1211023Sshannon #else NEQN 1311023Sshannon gap = VERT(1); 1411023Sshannon #endif NEQN 1511015Sshannon if( type=='-' ) gap = 0; 1611015Sshannon nlist = p2 - p1; 1711015Sshannon nlist2 = (nlist+1)/2; 1811015Sshannon mid = p1 + nlist2 -1; 1911015Sshannon h = 0; 2011015Sshannon for( i=p1; i<p2; i++ ) 2111015Sshannon h += eht[lp[i]]; 2211015Sshannon eht[yyval] = h + (nlist-1)*gap; 2311015Sshannon b = 0; 2411015Sshannon for( i=p2-1; i>mid; i-- ) 2511015Sshannon b += eht[lp[i]] + gap; 2611015Sshannon ebase[yyval] = (nlist%2) ? b + ebase[lp[mid]] 2711023Sshannon #ifndef NEQN 2811015Sshannon : b - VERT( (ps*6*5)/10 ) - gap; 2911023Sshannon #else NEQN 3011023Sshannon : b - VERT(1) - gap; 3111023Sshannon #endif NEQN 3211015Sshannon if(dbg) { 3311015Sshannon printf(".\tS%d <- %c pile of:", yyval, type); 3411015Sshannon for( i=p1; i<p2; i++) 3511015Sshannon printf(" S%d", lp[i]); 3611015Sshannon printf(";h=%d b=%d\n", eht[yyval], ebase[yyval]); 3711015Sshannon } 3811015Sshannon nrwid(lp[p1], ps, lp[p1]); 3911015Sshannon printf(".nr %d \\n(%d\n", yyval, lp[p1]); 4011015Sshannon for( i = p1+1; i<p2; i++ ) { 4111015Sshannon nrwid(lp[i], ps, lp[i]); 4211015Sshannon printf(".if \\n(%d>\\n(%d .nr %d \\n(%d\n", 4311015Sshannon lp[i], yyval, yyval, lp[i]); 4411015Sshannon } 4511015Sshannon printf(".ds %d \\v'%du'\\h'%du*\\n(%du'\\\n", yyval, ebase[yyval], 4611015Sshannon type=='R' ? 1 : 0, yyval); 4711015Sshannon for(i = p2-1; i >=p1; i--) { 4811015Sshannon hi = eht[lp[i]]; 4911015Sshannon bi = ebase[lp[i]]; 5011015Sshannon switch(type) { 5111015Sshannon 5211015Sshannon case 'L': 5311015Sshannon printf("\\v'%du'\\*(%d\\h'-\\n(%du'\\v'0-%du'\\\n", 5411015Sshannon -bi, lp[i], lp[i], hi-bi+gap); 5511015Sshannon continue; 5611015Sshannon case 'R': 5711015Sshannon printf("\\v'%du'\\h'-\\n(%du'\\*(%d\\v'0-%du'\\\n", 5811015Sshannon -bi, lp[i], lp[i], hi-bi+gap); 5911015Sshannon continue; 6011015Sshannon case 'C': 6111015Sshannon case '-': 6211015Sshannon printf("\\v'%du'\\h'\\n(%du-\\n(%du/2u'\\*(%d", 6311015Sshannon -bi, yyval, lp[i], lp[i]); 6411015Sshannon printf("\\h'-\\n(%du-\\n(%du/2u'\\v'0-%du'\\\n", 6511015Sshannon yyval, lp[i], hi-bi+gap); 6611015Sshannon continue; 6711015Sshannon } 6811015Sshannon } 6911015Sshannon printf("\\v'%du'\\h'%du*\\n(%du'\n", eht[yyval]-ebase[yyval]+gap, 7011015Sshannon type!='R' ? 1 : 0, yyval); 7111015Sshannon for( i=p1; i<p2; i++ ) 7211015Sshannon ofree(lp[i]); 7311015Sshannon lfont[yyval] = rfont[yyval] = 0; 7411015Sshannon } 75