1 #ifndef lint 2 static char sccsid[] = "@(#)fromto.c 2.1 (CWI) 85/07/18"; 3 #endif lint 4 # include "e.h" 5 6 fromto(p1, p2, p3) 7 int p1, p2, p3; 8 { 9 float b, h1, b1, t; 10 int subps; 11 12 yyval = salloc(); 13 lfont[yyval] = rfont[yyval] = 0; 14 h1 = eht[yyval] = eht[p1]; 15 b1 = ebase[p1]; 16 b = 0; 17 subps = ps; 18 ps += deltaps; 19 nrwid(p1, ps, p1); 20 printf(".nr %d \\n(%d\n", yyval, p1); 21 if (p2 > 0) { 22 nrwid(p2, subps, p2); 23 printf(".if \\n(%d>\\n(%d .nr %d \\n(%d\n", p2, yyval, yyval, p2); 24 eht[yyval] += eht[p2]; 25 b = eht[p2]; 26 } 27 if (p3 > 0) { 28 nrwid(p3, subps, p3); 29 printf(".if \\n(%d>\\n(%d .nr %d \\n(%d\n", p3, yyval, yyval, p3); 30 eht[yyval] += eht[p3]; 31 } 32 printf(".ds %d ", yyval); /* bottom of middle box */ 33 if (p2 > 0) { 34 t = eht[p2]-ebase[p2]+b1; 35 printf("\\v'%gm'\\h'\\n(%du-\\n(%du/2u'%s\\*(%d%s", 36 REL(t,ps), yyval, p2, DPS(ps,subps), p2, DPS(subps,ps)); 37 printf("\\h'-\\n(%du-\\n(%du/2u'\\v'%gm'\\\n", 38 yyval, p2, REL(-t,ps)); 39 } 40 printf("\\h'\\n(%du-\\n(%du/2u'\\*(%d\\h'\\n(%du-\\n(%du/2u'\\\n", 41 yyval, p1, p1, yyval, p1); 42 if (p3 >0) { 43 t = h1-b1+ebase[p3]; 44 printf("\\v'%gm'\\h'-\\n(%du-\\n(%du/2u'%s\\*(%d%s\\h'\\n(%du-\\n(%du/2u'\\v'%gm'\\\n", 45 REL(-t,ps), yyval, p3, DPS(ps,subps), p3, DPS(subps,ps), yyval, p3, REL(t,ps)); 46 } 47 printf("\n"); 48 ebase[yyval] = b + b1; 49 dprintf(".\tS%d <- %d from %d to %d; h=%g b=%g\n", 50 yyval, p1, p2, p3, eht[yyval], ebase[yyval]); 51 sfree(p1); 52 if (p2 > 0) 53 sfree(p2); 54 if (p3 > 0) 55 sfree(p3); 56 } 57