Annotation of OpenXM_contrib/gnuplot/term/corel.trm, Revision 1.1.1.1
1.1 maekawa 1: /*
2: * $Id: corel.trm,v 1.12 1998/04/14 00:17:35 drd Exp $
3: */
4:
5: /*
6: corel.trm
7:
8: A modified ai.trm for CorelDraw import filters
9: by Chris Parks, parks@physics.purdue.edu
10: Import from CorelDraw with the CorelTrace filter
11:
12: syntax: set terminal default
13: set terminal mode "fontname" fontsize,xsize,ysize,linewidth
14:
15: mode= color or monochrome (default=mono)
16: "fontname"= postscript font name (default="SwitzerlandLight")
17: fontsize = size of font in points (default=22pt)
18: xsize = width of page in inches (default=8.2in)
19: ysize = height of page in inches (default=10in)
20: linewidth = width of lines in points (default=1.2pt)
21:
22: */
23:
24: /*
25: * adapted to the new terminal layout by Stefan Bodewig (Dec. 1995)
26: */
27:
28: #include "driver.h"
29:
30: #ifdef TERM_REGISTER
31: register_term(corel)
32: #endif
33:
34: #ifdef TERM_PROTO
35: TERM_PUBLIC void COREL_options __PROTO((void));
36: TERM_PUBLIC void COREL_init __PROTO((void));
37: TERM_PUBLIC void COREL_graphics __PROTO((void));
38: TERM_PUBLIC void COREL_text __PROTO((void));
39: TERM_PUBLIC void COREL_reset __PROTO((void));
40: TERM_PUBLIC void COREL_linetype __PROTO((int linetype));
41: TERM_PUBLIC void COREL_move __PROTO((unsigned int x, unsigned int y));
42: TERM_PUBLIC void COREL_vector __PROTO((unsigned int x, unsigned int y));
43: TERM_PUBLIC void COREL_put_text __PROTO((unsigned int x, unsigned int y,
44: char *str));
45: TERM_PUBLIC int COREL_text_angle __PROTO((int ang));
46: TERM_PUBLIC int COREL_justify_text __PROTO((enum JUSTIFY mode));
47: #define CORELD_XMAX 5960 /* 8.2 inches wide */
48: #define CORELD_YMAX 7200 /* 10 inches high */
49: #define CORELD_VTIC (CORELD_YMAX/80)
50: #define CORELD_HTIC (CORELD_YMAX/80)
51: #define CORELD_VCHAR (22*COREL_SC) /* default is 22 point characters */
52: #define CORELD_HCHAR (22*COREL_SC*6/10)
53: #endif
54:
55: #ifndef TERM_PROTO_ONLY
56: #ifdef TERM_BODY
57:
58: /* plots for publication should be sans-serif (don't use TimesRoman) */
59: char corel_font[MAX_ID_LEN + 1] = "SwitzerlandLight"; /* name of font */
60: int corel_fontsize = 22; /* size of font in pts */
61: TBOOLEAN corel_color = FALSE;
62: TBOOLEAN corel_stroke = FALSE;
63: int corel_path_count = 0; /* count of lines in path */
64: int corel_ang = 0; /* text angle */
65: enum JUSTIFY corel_justify = LEFT; /* text is flush left */
66:
67:
68: /* default mode constants */
69: #define CORELD_XOFF 0 /* page offset in pts */
70: #define CORELD_YOFF 0
71: #define COREL_SC (10.0) /* scale is 1pt = 10 units */
72: #define CORELD_LW (1.2*COREL_SC) /* linewidth = 1.2 pts */
73:
74: unsigned int corel_xmax = CORELD_XMAX;
75: unsigned int corel_ymax = CORELD_YMAX;
76: float corel_lw = CORELD_LW;
77:
78: TERM_PUBLIC void COREL_options()
79: {
80: struct value a;
81:
82: if (!END_OF_COMMAND && almost_equals(c_token, "def$ault")) {
83: corel_color = FALSE;
84: strcpy(corel_font, "SwitzerlandLight");
85: corel_fontsize = 22;
86: corel_lw = CORELD_LW;
87: corel_xmax = CORELD_XMAX;
88: corel_ymax = CORELD_YMAX;
89: c_token++;
90: }
91: if (!END_OF_COMMAND && almost_equals(c_token, "mono$chrome")) {
92: corel_color = FALSE;
93: c_token++;
94: } else if (!END_OF_COMMAND && (almost_equals(c_token, "color$")
95: || almost_equals(c_token, "colour$"))) {
96: corel_color = TRUE;
97: c_token++;
98: }
99: if (!END_OF_COMMAND && isstring(c_token)) {
100: quote_str(corel_font, c_token, MAX_ID_LEN);
101: c_token++;
102: }
103: if (!END_OF_COMMAND) {
104: /* We have font size specified */
105: corel_fontsize = (int) real(const_express(&a));
106: c_token++;
107: term->v_char = (unsigned int) (corel_fontsize * COREL_SC);
108: term->h_char = (unsigned int) (corel_fontsize * COREL_SC * 6 / 10);
109: }
110: if (!END_OF_COMMAND) {
111: corel_xmax = (unsigned int) (real(const_express(&a)) * 720);
112: c_token++;
113: if (!END_OF_COMMAND) {
114: corel_ymax = (unsigned int) (real(const_express(&a)) * 720);
115: c_token++;
116: }
117: term->xmax = corel_xmax;
118: term->ymax = corel_ymax;
119: term->v_tic = corel_ymax / 80;
120: term->h_tic = corel_ymax / 80;
121: }
122: if (!END_OF_COMMAND) {
123: corel_lw = real(const_express(&a)) * COREL_SC;
124: c_token++;
125: }
126: sprintf(term_options, "%s \"%s\" %d,%0.1f,%0.1f,%0.1f",
127: corel_color ? "color" : "monochrome", corel_font,
128: corel_fontsize, corel_xmax / 720.0, corel_ymax / 720.0,
129: corel_lw / COREL_SC);
130: }
131:
132: TERM_PUBLIC void COREL_init()
133: {
134: fprintf(gpoutfile, "\
135: %%!PS-Adobe-2.0 EPSF-1.2\n\
136: %%%%BoundingBox: %d %d %d %d\n\
137: %%%%TemplateBox: %d %d %d %d\n\
138: %%%%EndComments\n\
139: %%%%EndProlog\n\
140: %%%%BeginSetup\n%%%%EndSetup\n",
141: CORELD_XOFF, CORELD_YOFF,
142: (int) ((corel_xmax) / COREL_SC + 0.5 + CORELD_XOFF),
143: (int) ((corel_ymax) / COREL_SC + 0.5 + CORELD_YOFF),
144: CORELD_XOFF, CORELD_YOFF,
145: (int) ((corel_xmax) / COREL_SC + 0.5 + CORELD_XOFF),
146: (int) ((corel_ymax) / COREL_SC + 0.5 + CORELD_YOFF));
147: }
148:
149:
150: TERM_PUBLIC void COREL_graphics()
151: {
152: corel_path_count = 0;
153: corel_stroke = FALSE;
154: }
155:
156:
157: TERM_PUBLIC void COREL_text()
158: {
159: if (corel_stroke) {
160: fputs("S\n", gpoutfile);
161: corel_stroke = FALSE;
162: }
163: corel_path_count = 0;
164: }
165:
166:
167: TERM_PUBLIC void COREL_reset()
168: {
169: fputs("%%%%Trailer\n", gpoutfile);
170: }
171:
172:
173: TERM_PUBLIC void COREL_linetype(linetype)
174: int linetype;
175: {
176: if (corel_stroke) {
177: fputs("S\n", gpoutfile);
178: corel_stroke = FALSE;
179: }
180: switch (linetype) {
181: case -2:
182: fprintf(gpoutfile, "%.2f w\n", corel_lw / COREL_SC);
183: if (corel_color) {
184: fputs("0 0 0 1 K\n", gpoutfile);
185: } else {
186: fputs("\
187: [] 0 d\n\
188: 0 j\n0 G\n", gpoutfile);
189: }
190: break;
191:
192: case -1:
193: fprintf(gpoutfile, "%.2f w\n", corel_lw / COREL_SC);
194: if (corel_color) {
195: fputs("0 0 0 1 K\n", gpoutfile);
196: } else {
197: fputs("\
198: [1 2] 0 d\n\
199: 0 j\n0 G\n", gpoutfile);
200: }
201: break;
202:
203: case 0:
204: fprintf(gpoutfile, "%.2f w\n", corel_lw / COREL_SC);
205: if (corel_color) {
206: fputs("1 0 1 0 K\n", gpoutfile);
207: } else {
208: fputs("\
209: [] 0 d\n\
210: 2 j\n0 G\n", gpoutfile);
211: }
212: break;
213:
214: case 1:
215: fprintf(gpoutfile, "%.2f w\n", corel_lw / COREL_SC);
216: if (corel_color) {
217: fputs("1 1 0 0 K\n", gpoutfile);
218: } else {
219: fputs("\
220: [4 2] 0 d\n\
221: 2 j\n0 G\n", gpoutfile);
222: }
223: break;
224:
225: case 2:
226: fprintf(gpoutfile, "%.2f w\n", corel_lw / COREL_SC);
227: if (corel_color) {
228: fputs("0 1 1 0 K\n", gpoutfile);
229: } else {
230: fputs("\
231: [2 3] 0 d\n\
232: 2 j\n0 G\n", gpoutfile);
233: }
234: break;
235:
236: case 3:
237: fprintf(gpoutfile, "%.2f w\n", corel_lw / COREL_SC);
238: if (corel_color) {
239: fputs("0 1 0 0 K\n", gpoutfile);
240: } else {
241: fputs("\
242: [1 1.5] 0 d\n\
243: 2 j\n0 G\n", gpoutfile);
244: }
245: break;
246:
247: case 4:
248: fprintf(gpoutfile, "%f w\n", corel_lw / COREL_SC);
249: if (corel_color) {
250: fputs("1 0 0 0 K\n", gpoutfile);
251: } else {
252: fputs("\
253: [5 2 1 2] 0 d\n\
254: 2 j\n0 G\n", gpoutfile);
255: }
256: break;
257:
258: case 5:
259: fprintf(gpoutfile, "%.2f w\n", corel_lw / COREL_SC);
260: if (corel_color) {
261: fputs("0 0 1 0 K\n", gpoutfile);
262: } else {
263: fputs("\
264: [4 3 1 3] 0 d\n\
265: 2 j\n0 G\n", gpoutfile);
266: }
267: break;
268:
269: case 6:
270: fprintf(gpoutfile, "%.2f w\n", corel_lw / COREL_SC);
271: if (corel_color) {
272: fputs("0 0 0 1 K\n", gpoutfile);
273: } else {
274: fputs("\
275: [2 2 2 4] 0 d\n\
276: 2 j\n0 G\n", gpoutfile);
277: }
278: break;
279:
280: case 7:
281: fprintf(gpoutfile, "%.2f w\n", corel_lw / COREL_SC);
282: if (corel_color) {
283: fputs("0 0.7 1 0 K\n", gpoutfile);
284: } else {
285: fputs("\
286: [2 2 2 2 2 4] 0 d\n\
287: 2 j\n0 G\n", gpoutfile);
288: }
289: break;
290:
291: case 8:
292: fprintf(gpoutfile, "%.2f w\n", corel_lw / COREL_SC);
293: if (corel_color) {
294: fputs("0.5 0.5 0.5 0 K\n", gpoutfile);
295: } else {
296: fputs("\
297: [2 2 2 2 2 2 2 4] 0 d\n\
298: 2 j\n0 G\n", gpoutfile);
299: }
300: break;
301: }
302: corel_path_count = 0;
303: }
304:
305:
306: TERM_PUBLIC void COREL_move(x, y)
307: unsigned int x, y;
308: {
309: if (corel_stroke)
310: fputs("S\n", gpoutfile);
311: fprintf(gpoutfile, "%0.2f %0.2f m\n", x / COREL_SC, y / COREL_SC);
312: corel_path_count += 1;
313: corel_stroke = TRUE;
314: }
315:
316:
317: TERM_PUBLIC void COREL_vector(x, y)
318: unsigned int x, y;
319: {
320: fprintf(gpoutfile, "%.2f %.2f l\n", x / COREL_SC, y / COREL_SC);
321: corel_path_count += 1;
322: corel_stroke = TRUE;
323: if (corel_path_count >= 400) {
324: fprintf(gpoutfile, "S\n%.2f %.2f m\n", x / COREL_SC, y / COREL_SC);
325: corel_path_count = 0;
326: }
327: }
328:
329:
330: TERM_PUBLIC void COREL_put_text(x, y, str)
331: unsigned int x, y;
332: char *str;
333: {
334: char ch;
335: if (corel_stroke) {
336: fputs("S\n", gpoutfile);
337: corel_stroke = FALSE;
338: }
339: switch (corel_justify) {
340: case LEFT:
341: fprintf(gpoutfile, "/_%s %d %d 0 0 z\n",
342: corel_font, corel_fontsize, corel_fontsize);
343: break;
344: case CENTRE:
345: fprintf(gpoutfile, "/_%s %d %d 0 1 z\n",
346: corel_font, corel_fontsize, corel_fontsize);
347: break;
348: case RIGHT:
349: fprintf(gpoutfile, "/_%s %d %d 0 2 z\n",
350: corel_font, corel_fontsize, corel_fontsize);
351: break;
352: }
353: if (corel_ang == 0) {
354: fprintf(gpoutfile, "[1 0 0 1 %.2f %.2f]e\n0 g\n",
355: x / COREL_SC, y / COREL_SC - corel_fontsize / 3.0);
356: } else {
357: fprintf(gpoutfile, "[0 1 -1 0 %.2f %.2f]e\n0 g\n",
358: x / COREL_SC - corel_fontsize / 3.0, y / COREL_SC);
359: }
360:
361: putc('(', gpoutfile);
362: ch = *str++;
363: while (ch != NUL) {
364: if ((ch == '(') || (ch == ')') || (ch == '\\'))
365: putc('\\', gpoutfile);
366: putc(ch, gpoutfile);
367: ch = *str++;
368: }
369: fputs(")t\nT\n", gpoutfile);
370: corel_path_count = 0;
371: }
372:
373: TERM_PUBLIC int COREL_text_angle(ang)
374: int ang;
375: {
376: corel_ang = ang;
377: return TRUE;
378: }
379:
380: TERM_PUBLIC int COREL_justify_text(mode)
381: enum JUSTIFY mode;
382: {
383: corel_justify = mode;
384: return TRUE;
385: }
386:
387: #endif /* TERM_BODY */
388:
389: #ifdef TERM_TABLE
390:
391: TERM_TABLE_START(corel_driver)
392: "corel", "EPS format for CorelDRAW",
393: CORELD_XMAX, CORELD_YMAX, CORELD_VCHAR, CORELD_HCHAR,
394: CORELD_VTIC, CORELD_HTIC, COREL_options, COREL_init, COREL_reset,
395: COREL_text, null_scale, COREL_graphics, COREL_move, COREL_vector,
396: COREL_linetype, COREL_put_text, COREL_text_angle,
397: COREL_justify_text, do_point, do_arrow, set_font_null
398: TERM_TABLE_END(corel_driver)
399:
400: #undef LAST_TERM
401: #define LAST_TERM corel_driver
402:
403: #endif /* TERM_TABLE */
404: #endif /* TERM_PROTO_ONLY */
405:
406: #ifdef TERM_HELP
407: START_HELP(corel)
408: "1 corel",
409: "?commands set terminal corel",
410: "?set terminal corel",
411: "?set term corel",
412: "?terminal corel",
413: "?term corel",
414: "?corel",
415: " The `corel` terminal driver supports CorelDraw.",
416: "",
417: " Syntax:",
418: " set terminal corel { default",
419: " | {monochrome | color",
420: " {<fontname> {\"<fontsize>\" ",
421: " {<xsize> <ysize> {<linewidth> }}}}}",
422: "",
423: " where the fontsize and linewidth are specified in points and the sizes in",
424: " inches. The defaults are monochrome, \"SwitzerlandLight\", 22, 8.2, 10 and 1.2."
425: END_HELP(corel)
426: #endif /* TERM_HELP */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>