diff options
Diffstat (limited to 'src/cmd/eqn/fromto.c')
-rw-r--r-- | src/cmd/eqn/fromto.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/cmd/eqn/fromto.c b/src/cmd/eqn/fromto.c new file mode 100644 index 00000000..2d4d7f74 --- /dev/null +++ b/src/cmd/eqn/fromto.c @@ -0,0 +1,52 @@ +# include "e.h" + +void fromto(int p1, int p2, int p3) +{ + double b, h1, b1, t; + int subps; + + yyval = salloc(); + lfont[yyval] = rfont[yyval] = 0; + h1 = eht[yyval] = eht[p1]; + b1 = ebase[p1]; + b = 0; + subps = ps; + ps += deltaps; + nrwid(p1, ps, p1); + printf(".nr %d \\n(%d\n", yyval, p1); + if (p2 > 0) { + nrwid(p2, subps, p2); + printf(".if \\n(%d>\\n(%d .nr %d \\n(%d\n", p2, yyval, yyval, p2); + eht[yyval] += eht[p2]; + b = eht[p2]; + } + if (p3 > 0) { + nrwid(p3, subps, p3); + printf(".if \\n(%d>\\n(%d .nr %d \\n(%d\n", p3, yyval, yyval, p3); + eht[yyval] += eht[p3]; + } + printf(".ds %d ", yyval); /* bottom of middle box */ + if (p2 > 0) { + t = eht[p2]-ebase[p2]+b1; + printf("\\v'%gm'\\h'\\n(%du-\\n(%du/2u'%s\\*(%d%s", + REL(t,ps), yyval, p2, DPS(ps,subps), p2, DPS(subps,ps)); + printf("\\h'-\\n(%du-\\n(%du/2u'\\v'%gm'\\\n", + yyval, p2, REL(-t,ps)); + } + printf("\\h'\\n(%du-\\n(%du/2u'\\*(%d\\h'\\n(%du-\\n(%du/2u'\\\n", + yyval, p1, p1, yyval, p1); + if (p3 >0) { + t = h1-b1+ebase[p3]; + printf("\\v'%gm'\\h'-\\n(%du-\\n(%du/2u'%s\\*(%d%s\\h'\\n(%du-\\n(%du/2u'\\v'%gm'\\\n", + REL(-t,ps), yyval, p3, DPS(ps,subps), p3, DPS(subps,ps), yyval, p3, REL(t,ps)); + } + printf("\n"); + ebase[yyval] = b + b1; + dprintf(".\tS%d <- %d from %d to %d; h=%g b=%g\n", + yyval, p1, p2, p3, eht[yyval], ebase[yyval]); + sfree(p1); + if (p2 > 0) + sfree(p2); + if (p3 > 0) + sfree(p3); +} |