tpic
This commit is contained in:
parent
434d1b41b6
commit
b6d98463b4
22 changed files with 5419 additions and 0 deletions
149
src/cmd/tpic/pltex.c
Normal file
149
src/cmd/tpic/pltex.c
Normal file
|
|
@ -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
|
||||
Loading…
Add table
Add a link
Reference in a new issue