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