Blame


1 b6d98463 2006-04-14 devnull /* replacement for pltroff.c to produce a TeX file that makes a box */
2 b6d98463 2006-04-14 devnull
3 b6d98463 2006-04-14 devnull #include <stdio.h>
4 b6d98463 2006-04-14 devnull #include <math.h>
5 b6d98463 2006-04-14 devnull #include "pic.h"
6 b6d98463 2006-04-14 devnull
7 b6d98463 2006-04-14 devnull double rangex, rangey; /* probably already available inside pic somewhere */
8 b6d98463 2006-04-14 devnull extern int dbg;
9 b6d98463 2006-04-14 devnull int frameno;
10 b6d98463 2006-04-14 devnull
11 b6d98463 2006-04-14 devnull /*-----------copied from old version----------*/
12 b6d98463 2006-04-14 devnull
13 b6d98463 2006-04-14 devnull void
14 b6d98463 2006-04-14 devnull arrow(double x0, double y0, double x1, double y1, double w, double h, double ang, int nhead) /* draw arrow (without shaft) */
15 b6d98463 2006-04-14 devnull /* head wid w, len h, rotated ang */
16 b6d98463 2006-04-14 devnull /* and drawn with nhead lines */
17 b6d98463 2006-04-14 devnull {
18 b6d98463 2006-04-14 devnull double alpha, rot, drot, hyp;
19 b6d98463 2006-04-14 devnull float dx, dy;
20 b6d98463 2006-04-14 devnull int i;
21 b6d98463 2006-04-14 devnull
22 b6d98463 2006-04-14 devnull rot = atan2(w / 2, h);
23 b6d98463 2006-04-14 devnull hyp = sqrt(w/2 * w/2 + h * h);
24 b6d98463 2006-04-14 devnull alpha = atan2(y1-y0, x1-x0) + ang;
25 b6d98463 2006-04-14 devnull if (nhead < 2)
26 b6d98463 2006-04-14 devnull nhead = 2;
27 b6d98463 2006-04-14 devnull for (i = nhead-1; i >= 0; i--) {
28 b6d98463 2006-04-14 devnull drot = 2 * rot / (double) (nhead-1) * (double) i;
29 b6d98463 2006-04-14 devnull dx = hyp * cos(alpha + PI - rot + drot);
30 b6d98463 2006-04-14 devnull dy = hyp * sin(alpha + PI - rot + drot);
31 b6d98463 2006-04-14 devnull line(x1+dx, y1+dy, x1, y1);
32 b6d98463 2006-04-14 devnull }
33 b6d98463 2006-04-14 devnull }
34 b6d98463 2006-04-14 devnull
35 b6d98463 2006-04-14 devnull
36 b6d98463 2006-04-14 devnull /*-----------new code----------*/
37 b6d98463 2006-04-14 devnull
38 b6d98463 2006-04-14 devnull void
39 b6d98463 2006-04-14 devnull printlf(int line, char *name)
40 b6d98463 2006-04-14 devnull {
41 b6d98463 2006-04-14 devnull }
42 b6d98463 2006-04-14 devnull
43 b6d98463 2006-04-14 devnull void
44 b6d98463 2006-04-14 devnull fillstart(double v) /* only choose black, light grey (.75), or white, for now */
45 b6d98463 2006-04-14 devnull {
46 b6d98463 2006-04-14 devnull if (v<.05)
47 b6d98463 2006-04-14 devnull fprintf(TEXFILE, " \\special{bk}%%\n");
48 b6d98463 2006-04-14 devnull else if (v>.95)
49 b6d98463 2006-04-14 devnull fprintf(TEXFILE, " \\special{wh}%%\n");
50 b6d98463 2006-04-14 devnull else
51 b6d98463 2006-04-14 devnull fprintf(TEXFILE, " \\special{sh}%%\n");
52 b6d98463 2006-04-14 devnull }
53 b6d98463 2006-04-14 devnull
54 b6d98463 2006-04-14 devnull void
55 b6d98463 2006-04-14 devnull fillend(void)
56 b6d98463 2006-04-14 devnull {
57 b6d98463 2006-04-14 devnull }
58 b6d98463 2006-04-14 devnull
59 b6d98463 2006-04-14 devnull void
60 b6d98463 2006-04-14 devnull troff(char *s)
61 b6d98463 2006-04-14 devnull {
62 b6d98463 2006-04-14 devnull int size;
63 b6d98463 2006-04-14 devnull
64 b6d98463 2006-04-14 devnull if (strncmp(s, ".ps", 3) == 0) {
65 b6d98463 2006-04-14 devnull if (sscanf(&s[3], " %d ", &size) > 0) {
66 b6d98463 2006-04-14 devnull fprintf(TEXFILE, " \\special{pn %d}%%\n", size);
67 b6d98463 2006-04-14 devnull e1->pdiam = size;
68 b6d98463 2006-04-14 devnull } else fprintf(stderr, "Malformed .ps command: %s\n", s);
69 b6d98463 2006-04-14 devnull }
70 b6d98463 2006-04-14 devnull }
71 b6d98463 2006-04-14 devnull
72 b6d98463 2006-04-14 devnull
73 b6d98463 2006-04-14 devnull void
74 b6d98463 2006-04-14 devnull space(double x0, double y0, double x1, double y1) /* set limits of page */
75 b6d98463 2006-04-14 devnull {
76 b6d98463 2006-04-14 devnull e0->sidex = e1->sidex = deltx*1000;
77 b6d98463 2006-04-14 devnull e0->sidey = e1->sidey = e0->bottom = e1->bottom = delty*1000;
78 b6d98463 2006-04-14 devnull range(x0, y0, x1, y1);
79 b6d98463 2006-04-14 devnull }
80 b6d98463 2006-04-14 devnull
81 b6d98463 2006-04-14 devnull void
82 b6d98463 2006-04-14 devnull dot(void)
83 b6d98463 2006-04-14 devnull {
84 b6d98463 2006-04-14 devnull /* use .005" radius at nominal 9pt pen size */
85 b6d98463 2006-04-14 devnull disc(e1->copyx,e1->copyy,(e1->pdiam/9.0)*(4.3/e1->scalex));
86 b6d98463 2006-04-14 devnull }
87 b6d98463 2006-04-14 devnull
88 b6d98463 2006-04-14 devnull void
89 b6d98463 2006-04-14 devnull label(char *s, int t, int nh) /* text s of type t nh half-lines up */
90 b6d98463 2006-04-14 devnull {
91 b6d98463 2006-04-14 devnull double nem;
92 b6d98463 2006-04-14 devnull
93 b6d98463 2006-04-14 devnull if (t & ABOVE)
94 b6d98463 2006-04-14 devnull nh++;
95 b6d98463 2006-04-14 devnull else if (t & BELOW)
96 b6d98463 2006-04-14 devnull nh--;
97 b6d98463 2006-04-14 devnull nem = .2 - nh*.6;
98 b6d98463 2006-04-14 devnull fprintf(TEXFILE," \\rlap{\\kern %6.3fin\\lower%6.3fin\\hbox{\\lower%5.2fem\\hbox to 0pt{",
99 b6d98463 2006-04-14 devnull INCHES(DTRX(e1->copyx)), INCHES(DTRY(e1->copyy)), nem);
100 b6d98463 2006-04-14 devnull fprintf(TEXFILE,t&LJUST?"%s\\hss":(t&RJUST?"\\hss %s":"\\hss %s\\hss"),s);
101 b6d98463 2006-04-14 devnull fprintf(TEXFILE,"}}}%%\n");
102 b6d98463 2006-04-14 devnull }
103 b6d98463 2006-04-14 devnull
104 b6d98463 2006-04-14 devnull void
105 b6d98463 2006-04-14 devnull spline(double x, double y, double/*sic*/ n, float *p, int dashed, double ddval)
106 b6d98463 2006-04-14 devnull {
107 b6d98463 2006-04-14 devnull int k, j;
108 b6d98463 2006-04-14 devnull
109 b6d98463 2006-04-14 devnull fprintf(TEXFILE," \\special{pa %d %d}%%\n",TRX(x),TRY(y));
110 b6d98463 2006-04-14 devnull for(k=0, j=0; k<n; k++, j+=2){
111 b6d98463 2006-04-14 devnull x += p[j];
112 b6d98463 2006-04-14 devnull y += p[j+1];
113 b6d98463 2006-04-14 devnull fprintf(TEXFILE," \\special{pa %d %d}%%\n",TRX(x),TRY(y));
114 b6d98463 2006-04-14 devnull }
115 b6d98463 2006-04-14 devnull fprintf(TEXFILE," \\special{sp}%%\n");
116 b6d98463 2006-04-14 devnull }
117 b6d98463 2006-04-14 devnull
118 b6d98463 2006-04-14 devnull void
119 b6d98463 2006-04-14 devnull ellipse(double x, double y, double r1, double r2)
120 b6d98463 2006-04-14 devnull {
121 b6d98463 2006-04-14 devnull fprintf(TEXFILE, " \\special{ar %d %d %d %d 0.0 6.2832}%%\n",
122 b6d98463 2006-04-14 devnull TRX(x), TRY(y), SCX(r1), -SCY(r2));
123 b6d98463 2006-04-14 devnull }
124 b6d98463 2006-04-14 devnull
125 b6d98463 2006-04-14 devnull void
126 b6d98463 2006-04-14 devnull arc(double xc, double yc, double x0, double y0, double x1, double y1) /* draw arc with center xc,yc */
127 b6d98463 2006-04-14 devnull {
128 b6d98463 2006-04-14 devnull devarc(x0, y0, x1, y1, xc, yc, 1 ); /* radius=1 means counterclockwise */
129 b6d98463 2006-04-14 devnull }
130 b6d98463 2006-04-14 devnull
131 b6d98463 2006-04-14 devnull /* If NOEXPANDDASH is defined, use this instead of the normal dotline
132 b6d98463 2006-04-14 devnull * in print(). This dotline relies on vec() noticing that e1->pen
133 b6d98463 2006-04-14 devnull * is not SOLIDPEN, and putting out a call to a different postscript
134 b6d98463 2006-04-14 devnull * routine.
135 b6d98463 2006-04-14 devnull */
136 b6d98463 2006-04-14 devnull #ifdef NOEXPANDDASH
137 b6d98463 2006-04-14 devnull
138 b6d98463 2006-04-14 devnull void
139 b6d98463 2006-04-14 devnull dotline(double x0, double y0, double x1, double y1, int ddtype, double ddval)
140 b6d98463 2006-04-14 devnull {
141 b6d98463 2006-04-14 devnull if (ddval != 0)
142 b6d98463 2006-04-14 devnull e1->dashlen = ddval;
143 b6d98463 2006-04-14 devnull e1->pen = (ddtype&DOTBIT)? DOTPEN : DASHPEN;
144 b6d98463 2006-04-14 devnull move(x0, y0);
145 b6d98463 2006-04-14 devnull vec(x1, y1);
146 b6d98463 2006-04-14 devnull e1->pen = SOLIDPEN;
147 b6d98463 2006-04-14 devnull e1->dashlen = e0->dashlen;
148 b6d98463 2006-04-14 devnull }
149 b6d98463 2006-04-14 devnull #endif