diff options
Diffstat (limited to 'src/cmd/tpic/pltex.c')
-rw-r--r-- | src/cmd/tpic/pltex.c | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/src/cmd/tpic/pltex.c b/src/cmd/tpic/pltex.c new file mode 100644 index 00000000..e757f195 --- /dev/null +++ b/src/cmd/tpic/pltex.c @@ -0,0 +1,149 @@ +/* replacement for pltroff.c to produce a TeX file that makes a box */ + +#include <stdio.h> +#include <math.h> +#include "pic.h" + +double rangex, rangey; /* probably already available inside pic somewhere */ +extern int dbg; +int frameno; + +/*-----------copied from old version----------*/ + +void +arrow(double x0, double y0, double x1, double y1, double w, double h, double ang, int nhead) /* draw arrow (without shaft) */ + /* head wid w, len h, rotated ang */ + /* and drawn with nhead lines */ +{ + double alpha, rot, drot, hyp; + float dx, dy; + int i; + + rot = atan2(w / 2, h); + hyp = sqrt(w/2 * w/2 + h * h); + alpha = atan2(y1-y0, x1-x0) + ang; + if (nhead < 2) + nhead = 2; + for (i = nhead-1; i >= 0; i--) { + drot = 2 * rot / (double) (nhead-1) * (double) i; + dx = hyp * cos(alpha + PI - rot + drot); + dy = hyp * sin(alpha + PI - rot + drot); + line(x1+dx, y1+dy, x1, y1); + } +} + + +/*-----------new code----------*/ + +void +printlf(int line, char *name) +{ +} + +void +fillstart(double v) /* only choose black, light grey (.75), or white, for now */ +{ + if (v<.05) + fprintf(TEXFILE, " \\special{bk}%%\n"); + else if (v>.95) + fprintf(TEXFILE, " \\special{wh}%%\n"); + else + fprintf(TEXFILE, " \\special{sh}%%\n"); +} + +void +fillend(void) +{ +} + +void +troff(char *s) +{ + int size; + + if (strncmp(s, ".ps", 3) == 0) { + if (sscanf(&s[3], " %d ", &size) > 0) { + fprintf(TEXFILE, " \\special{pn %d}%%\n", size); + e1->pdiam = size; + } else fprintf(stderr, "Malformed .ps command: %s\n", s); + } +} + + +void +space(double x0, double y0, double x1, double y1) /* set limits of page */ +{ + e0->sidex = e1->sidex = deltx*1000; + e0->sidey = e1->sidey = e0->bottom = e1->bottom = delty*1000; + range(x0, y0, x1, y1); +} + +void +dot(void) +{ + /* use .005" radius at nominal 9pt pen size */ + disc(e1->copyx,e1->copyy,(e1->pdiam/9.0)*(4.3/e1->scalex)); +} + +void +label(char *s, int t, int nh) /* text s of type t nh half-lines up */ +{ + double nem; + + if (t & ABOVE) + nh++; + else if (t & BELOW) + nh--; + nem = .2 - nh*.6; + fprintf(TEXFILE," \\rlap{\\kern %6.3fin\\lower%6.3fin\\hbox{\\lower%5.2fem\\hbox to 0pt{", + INCHES(DTRX(e1->copyx)), INCHES(DTRY(e1->copyy)), nem); + fprintf(TEXFILE,t&LJUST?"%s\\hss":(t&RJUST?"\\hss %s":"\\hss %s\\hss"),s); + fprintf(TEXFILE,"}}}%%\n"); +} + +void +spline(double x, double y, double/*sic*/ n, float *p, int dashed, double ddval) +{ + int k, j; + + fprintf(TEXFILE," \\special{pa %d %d}%%\n",TRX(x),TRY(y)); + for(k=0, j=0; k<n; k++, j+=2){ + x += p[j]; + y += p[j+1]; + fprintf(TEXFILE," \\special{pa %d %d}%%\n",TRX(x),TRY(y)); + } + fprintf(TEXFILE," \\special{sp}%%\n"); +} + +void +ellipse(double x, double y, double r1, double r2) +{ + fprintf(TEXFILE, " \\special{ar %d %d %d %d 0.0 6.2832}%%\n", + TRX(x), TRY(y), SCX(r1), -SCY(r2)); +} + +void +arc(double xc, double yc, double x0, double y0, double x1, double y1) /* draw arc with center xc,yc */ +{ + devarc(x0, y0, x1, y1, xc, yc, 1 ); /* radius=1 means counterclockwise */ +} + +/* If NOEXPANDDASH is defined, use this instead of the normal dotline + * in print(). This dotline relies on vec() noticing that e1->pen + * is not SOLIDPEN, and putting out a call to a different postscript + * routine. + */ +#ifdef NOEXPANDDASH + +void +dotline(double x0, double y0, double x1, double y1, int ddtype, double ddval) +{ + if (ddval != 0) + e1->dashlen = ddval; + e1->pen = (ddtype&DOTBIT)? DOTPEN : DASHPEN; + move(x0, y0); + vec(x1, y1); + e1->pen = SOLIDPEN; + e1->dashlen = e0->dashlen; +} +#endif |