Annotation of OpenXM_contrib/gnuplot/term/corel.trm, Revision 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>