Annotation of OpenXM_contrib/gnuplot/term/gif.trm, Revision 1.1
1.1 ! maekawa 1: /*
! 2: * $Id: $
! 3: */
! 4:
! 5: /* GNUPLOT -- gif.trm */
! 6:
! 7: /*[
! 8: * Copyright 1998
! 9: *
! 10: * Permission to use, copy, and distribute this software and its
! 11: * documentation for any purpose with or without fee is hereby granted,
! 12: * provided that the above copyright notice appear in all copies and
! 13: * that both that copyright notice and this permission notice appear
! 14: * in supporting documentation.
! 15: *
! 16: * Permission to modify the software is granted, but not the right to
! 17: * distribute the complete modified source code. Modifications are to
! 18: * be distributed as patches to the released version. Permission to
! 19: * distribute binaries produced by compiling modified sources is granted,
! 20: * provided you
! 21: * 1. distribute the corresponding source modifications from the
! 22: * released version in the form of a patch file along with the binaries,
! 23: * 2. add special version identification to distinguish your version
! 24: * in addition to the base release version number,
! 25: * 3. provide your name and address as the primary contact for the
! 26: * support of your modified version, and
! 27: * 4. retain our contact information in regard to use of the base
! 28: * software.
! 29: * Permission to distribute the released version of the source code along
! 30: * with corresponding source modifications in the form of a patch file is
! 31: * granted with same provisions 2 through 4 for binary distributions.
! 32: *
! 33: * This software is provided "as is" without express or implied warranty
! 34: * to the extent permitted by applicable law.
! 35: ]*/
! 36:
! 37: /*
! 38: * This file is included by ../term.c.
! 39: *
! 40: * This terminal driver supports:
! 41: * GD GIF library 1.2 & 1.3
! 42: *
! 43: * To Use:
! 44: *
! 45: * set terminal gif ?options ...?
! 46: *
! 47: * Where an option is:
! 48: *
! 49: * transparent - generate transparent GIFs. The first color will
! 50: * be the transparent one.
! 51: *
! 52: * interlace - generate interlaced GIFs.
! 53: *
! 54: * size (in pixels)
! 55: *
! 56: * font (small,medium,large)
! 57: *
! 58: * xrrggbb - sets the next color. x is the literal character 'x',
! 59: * rrggbb are the red green and blue components in hex. For example
! 60: * x00ff00 is green. The background color is set first, then the
! 61: * color borders, then the X & Y axis, then the plotting colors.
! 62: * (The wierd color spec is in order to get around limitations
! 63: * in gnuplot's scanner.)
! 64: *
! 65: * This driver is modeled after the PBM driver pbm.trm.
! 66: *
! 67: * AUTHORS
! 68: * Sam Shen <sls@mh1.lbl.gov>
! 69: * Alex Woo <woo@playfair.stanford.edu>
! 70: *
! 71: * CONTRIBUTORS
! 72: * Alfred Reibenschuh <alfred.reibenschuh@cait.co.at> or <fredo@blackbox.at>
! 73: *
! 74: * send your comments or suggestions to:
! 75: * info-gnuplot@cs.dartmouth.edu
! 76: *
! 77: * This version outputs either color or monochrome GIFs. The default
! 78: * is 640x480 pixels.
! 79: *
! 80: * link with -Lterm/gd -lgd if your directory structure is gnuplot/term/gd
! 81: *
! 82: * gd is not distributed with gnuplot, because of the UNISYS license thing.
! 83: *
! 84: * find out about gd from http://www.boutell.com/gd/
! 85: *
! 86: * [Update: as of version 1.3, gd does not use any more UNISYS licensed
! 87: * code. The gnuplot team may decide to include this version some day.]
! 88: *
! 89: */
! 90:
! 91: #include "driver.h"
! 92:
! 93: #ifdef TERM_REGISTER
! 94: register_term(gif)
! 95: #endif
! 96:
! 97: #ifdef TERM_PROTO
! 98: TERM_PUBLIC void GIF_options __PROTO((void));
! 99: TERM_PUBLIC void GIF_init __PROTO((void));
! 100: TERM_PUBLIC void GIF_graphics __PROTO((void));
! 101: TERM_PUBLIC void GIF_text __PROTO((void));
! 102: TERM_PUBLIC void GIF_linetype __PROTO((int linetype));
! 103: TERM_PUBLIC void GIF_move __PROTO((unsigned int x, unsigned int y));
! 104: TERM_PUBLIC void GIF_vector __PROTO((unsigned int x, unsigned int y));
! 105: TERM_PUBLIC void GIF_put_text __PROTO((unsigned int x, unsigned int y, char str[]));
! 106: TERM_PUBLIC int GIF_text_angle __PROTO((int ang));
! 107: TERM_PUBLIC void GIF_reset __PROTO((void));
! 108:
! 109: #include "gd.h"
! 110: extern gdFontPtr gdFontSmall; /* 6x12 */
! 111: extern gdFontPtr gdFontLarge; /* 8x16 */
! 112: extern gdFontPtr gdFontMediumBold; /* 7x13 */
! 113:
! 114:
! 115: #define GREG_XMAX 640
! 116: #define GREG_YMAX 480
! 117:
! 118:
! 119: int GIF_XMAX = GREG_XMAX;
! 120: int GIF_YMAX = GREG_YMAX;
! 121:
! 122:
! 123: #define GIF_FONT_SMALL 1
! 124: #ifdef GIF_FONT_SMALL
! 125: # define gdfont gdFontSmall
! 126: # define GIF_VCHAR 12
! 127: # define GIF_HCHAR 6
! 128: #else
! 129: # define gdfont gdFontMediumBold
! 130: # define GIF_VCHAR 13
! 131: # define GIF_HCHAR 7
! 132: #endif
! 133:
! 134: static gdFontPtr GIF_font;
! 135:
! 136: #define GIF_VTIC (GREG_YMAX/100)
! 137: #define GIF_HTIC (GREG_XMAX/150)
! 138:
! 139: #define GIF_MAX_COLORS 256
! 140: #define GOT_NEXT_PROTO
! 141: #endif
! 142:
! 143: #ifndef TERM_PROTO_ONLY
! 144: #ifdef TERM_BODY
! 145:
! 146: static struct {
! 147: gdImagePtr image;
! 148: gdFontPtr font;
! 149: unsigned int x, y;
! 150: int height;
! 151: int charh, charw;
! 152: int color;
! 153: int n_colors;
! 154: int color_table[GIF_MAX_COLORS];
! 155: int rgb_table[GIF_MAX_COLORS];
! 156: int angle;
! 157: int flags;
! 158: int linetype;
! 159: } gif_state;
! 160:
! 161: #define GIF_USE_TRANSPARENT 1
! 162: #define GIF_USE_INTERLACE 2
! 163:
! 164: static unsigned int gif_color_rgbs[] =
! 165: {
! 166: 0xffffff, /* background: white */
! 167: 0x000000, /* borders: black */
! 168: 0x404040, /* x & y axes: grey */
! 169: 0xff0000, /* color 01: red */
! 170: 0x00c000, /* color 02: dark green */
! 171: 0x0080ff, /* color 03: dark blue */
! 172: 0xc000ff, /* color 04: dark magenta */
! 173: 0xc0ff40, /* color 05: yellow */
! 174: 0xc04000, /* color 06: orange */
! 175: 0x40ff80, /* color 07: sea green */
! 176: 0x2020c0, /* color 08: royal blue */
! 177: 0x8000c0, /* color 09: dark violet */
! 178: /* please note: these colors are optimized for web216 compatibility */
! 179: 0x006080, /* DeepSkyBlue4 */
! 180: 0x008000, /* green4 */
! 181: 0x008040, /* SpringGreen4 */
! 182: 0x008080, /* dark cyan, turquoise4 */
! 183: 0x00c060, /* SpringGreen3 */
! 184: 0x00c0c0, /* cyan3, turquoise3 */
! 185: 0x00ff00, /* green */
! 186: 0x208020, /* forest green */
! 187: 0x306080, /* SteelBlue4 */
! 188: 0x404040, /* grey25-31 */
! 189: 0x408000, /* chartreuse4 */
! 190: 0x000080, /* dark blue, navy blue */
! 191: 0x806000, /* DarkGoldenrod4 */
! 192: 0x806010, /* goldenrod4 */
! 193: 0x806060, /* pink4 */
! 194: 0x806080, /* plum4 */
! 195: 0x0000c0, /* medium blue */
! 196: 0x0000ff, /* blue */
! 197: 0x006000, /* dark green */
! 198: 0x40c080, /* SeaGreen3 */
! 199: 0x60a0c0, /* SkyBlue3 */
! 200: 0x60c000, /* chartreuse3 */
! 201: 0x60c0a0, /* medium aquamarine */
! 202: 0x800000, /* dark red */
! 203: 0x800080, /* dark magenta */
! 204: 0x602080, /* DarkOrchid4 */
! 205: 0x606060, /* dim grey */
! 206: 0x00ffff, /* cyan1, turquoise1 */
! 207: 0x202020, /* grey13-18 */
! 208: 0x204040, /* dark slate grey */
! 209: 0x204080, /* RoyalBlue4 */
! 210: 0x608020, /* olive drab */
! 211: 0x608060, /* DarkSeaGreen4 */
! 212: 0x608080, /* LightBlue4, PaleTurquoise4 */
! 213: 0x808040, /* LightGoldenrod4, khaki4 */
! 214: 0x808080, /* grey51-56 */
! 215: 0xa0a0a0, /* dark grey, grey63-68 */
! 216: 0xa0d0e0, /* light blue */
! 217: 0xc02020, /* firebrick3 */
! 218: 0xc06000, /* DarkOrange3 */
! 219: 0x80c0e0, /* sky blue */
! 220: 0xc060c0, /* orchid3 */
! 221: 0xc08000, /* orange3 */
! 222: 0xc08060, /* LightSalmon3 */
! 223: 0xff4000, /* orange red */
! 224: 0xff4040, /* brown1, tomato */
! 225: 0x80c0ff, /* light sky blue */
! 226: 0xff8060, /* salmon */
! 227: 0xff8080, /* light coral */
! 228: 0xc0a000, /* gold3 */
! 229: 0xc0c0c0, /* grey76-81, honeydew3, ivory3, snow3 */
! 230: 0xc0ffc0, /* DarkSeaGreen1 */
! 231: 0xff0000, /* red */
! 232: 0xff00ff, /* magenta */
! 233: 0xff80a0, /* PaleVioletRed1 */
! 234: 0xff80ff, /* orchid1 */
! 235: 0xc0c0a0, /* LemonChiffon3 */
! 236: 0xff6060, /* IndianRed1 */
! 237: 0xff8000, /* dark orange */
! 238: 0xffa000, /* orange */
! 239: 0x80e0e0, /* CadetBlue2, DarkSlateGray2 */
! 240: 0xa0e0e0, /* pale turquoise */
! 241: 0xa0ff20, /* green yellow */
! 242: 0xc00000, /* red3 */
! 243: 0xc000c0, /* magenta3 */
! 244: 0xa02020, /* brown */
! 245: 0xa020ff, /* purple */
! 246: 0x802000, /* OrangeRed4 */
! 247: 0x802020, /* brown4 */
! 248: 0x804000, /* DarkOrange4 */
! 249: 0x804020, /* sienna4 */
! 250: 0x804080, /* orchid4 */
! 251: 0x8060c0, /* MediumPurple3 */
! 252: 0x8060ff, /* SlateBlue1 */
! 253: 0x808000, /* yellow4 */
! 254: 0xa080ff, /* MediumPurple1 */
! 255: 0xc06080, /* PaleVioletRed3 */
! 256: 0xc0c000, /* yellow3 */
! 257: 0xff8040, /* sienna1 */
! 258: 0xffa040, /* tan1 */
! 259: 0xffa060, /* sandy brown */
! 260: 0xffa070, /* light salmon */
! 261: 0xffc020, /* goldenrod1 */
! 262: 0xffc0c0, /* RosyBrown1, pink */
! 263: 0xffff00, /* yellow */
! 264: 0xffff80, /* khaki1 */
! 265: 0xffffc0 /* lemon chiffon */
! 266: };
! 267: #define GIF_N_DEFAULT_COLORS (sizeof(gif_color_rgbs)/sizeof(gif_color_rgbs[0]))
! 268:
! 269: /*
! 270: * _options() Called when terminal type is selected.
! 271: * This procedure should parse options on the command line. A list of the
! 272: * currently selected options should be stored in term_options[] in a form
! 273: * suitable for use with the set term command. term_options[] is used by
! 274: * the save command. Use options_null() if no options are available.
! 275: */
! 276: TERM_PUBLIC void GIF_options()
! 277: {
! 278: int gif_font, i;
! 279: term_options[0] = NUL;
! 280: gif_state.n_colors = 0;
! 281: gif_state.flags = 0;
! 282: gif_font = 1;
! 283: GIF_font = gdfont;
! 284:
! 285: while (!END_OF_COMMAND) {
! 286: if (almost_equals(c_token, "t$ransparent")) {
! 287: gif_state.flags |= GIF_USE_TRANSPARENT;
! 288: ++c_token;
! 289: } else if (almost_equals(c_token, "i$nterlace")) {
! 290: gif_state.flags |= GIF_USE_INTERLACE;
! 291: ++c_token;
! 292: } else if (almost_equals(c_token, "s$mall")) {
! 293: GIF_font = gdFontSmall;
! 294: gif_font = 1;
! 295: term->v_char = (unsigned int) (12);
! 296: term->h_char = (unsigned int) (6);
! 297: ++c_token;
! 298: } else if (almost_equals(c_token, "m$edium")) {
! 299: GIF_font = gdFontMediumBold;
! 300: gif_font = 2;
! 301: term->v_char = (unsigned int) (13);
! 302: term->h_char = (unsigned int) (7);
! 303: ++c_token;
! 304: } else if (almost_equals(c_token, "l$arge")) {
! 305: GIF_font = gdFontLarge;
! 306: gif_font = 3;
! 307: term->v_char = (unsigned int) (16);
! 308: term->h_char = (unsigned int) (8);
! 309: ++c_token;
! 310: } else if (almost_equals(c_token, "si$ze")) {
! 311: struct value s;
! 312: c_token++;
! 313: if (END_OF_COMMAND) {
! 314: GIF_XMAX = GREG_XMAX;
! 315: GIF_YMAX = GREG_YMAX;
! 316: term->v_tic = GIF_YMAX / 80;
! 317: term->h_tic = GIF_XMAX / 80;
! 318: } else {
! 319: GIF_XMAX = real(const_express(&s));
! 320: if (equals(c_token, ",")) {
! 321: c_token++;
! 322: GIF_YMAX = real(const_express(&s));
! 323: term->v_tic = GIF_YMAX / 80;
! 324: term->h_tic = GIF_XMAX / 80;
! 325: term->ymax = GIF_YMAX;
! 326: term->xmax = GIF_XMAX;
! 327: }
! 328: }
! 329: } else { /* not "size" */
! 330: char *string = input_line + token[c_token].start_index;
! 331: unsigned long color;
! 332: if (sscanf(string, "x%lx", &color) != 1) {
! 333: int_error("invalid color spec, must be xRRGGBB", c_token);
! 334: } else if (gif_state.n_colors == GIF_MAX_COLORS) {
! 335: int_warn("too many colors, ingoring", c_token);
! 336: ++c_token;
! 337: } else {
! 338: gif_state.rgb_table[gif_state.n_colors++] = color;
! 339: ++c_token;
! 340: }
! 341: }
! 342: }
! 343:
! 344:
! 345: /* now generate options string */
! 346:
! 347: if (gif_state.flags & GIF_USE_TRANSPARENT) {
! 348: strcat(term_options, "transparent ");
! 349: }
! 350: if (gif_state.flags & GIF_USE_INTERLACE) {
! 351: strcat(term_options, "interlace ");
! 352: }
! 353: switch (gif_font) {
! 354: case 1:
! 355: strcat(term_options, "small ");
! 356: break;
! 357: case 2:
! 358: strcat(term_options, "medium ");
! 359: break;
! 360: case 3:
! 361: strcat(term_options, "large ");
! 362: break;
! 363: }
! 364: sprintf(term_options + strlen(term_options),
! 365: "size %d,%d ", GIF_XMAX, GIF_YMAX);
! 366:
! 367: for (i = 0; i < gif_state.n_colors; i++) {
! 368: sprintf(term_options + strlen(term_options),
! 369: "x%06x ", gif_state.rgb_table[i]);
! 370: }
! 371: }
! 372:
! 373:
! 374: /*
! 375: * _init() Called once, when the device is first selected. This procedure
! 376: * should set up things that only need to be set once, like handshaking and
! 377: * character sets etc...
! 378: */
! 379: TERM_PUBLIC void GIF_init()
! 380: {
! 381: gif_state.linetype = 0;
! 382: }
! 383:
! 384: /*
! 385: * _reset() Called when gnuplot is exited, the output device changed or
! 386: * the terminal type changed. This procedure should reset the device,
! 387: * possibly flushing a buffer somewhere or generating a form feed.
! 388: */
! 389: TERM_PUBLIC void GIF_reset()
! 390: {
! 391: }
! 392:
! 393: /*
! 394: * _graphics() Called just before a plot is going to be displayed. This
! 395: * procedure should set the device into graphics mode. Devices which can't
! 396: * be used as terminals (like plotters) will probably be in graphics mode
! 397: * always and therefore won't need this.
! 398: */
! 399: TERM_PUBLIC void GIF_graphics()
! 400: {
! 401: int i;
! 402: unsigned int rgb;
! 403: gif_state.font = GIF_font;
! 404: gif_state.color = 0;
! 405: gif_state.image = gdImageCreate((int) (xsize * GIF_XMAX),
! 406: (int) (ysize * GIF_YMAX));
! 407: gif_state.height = (int) (ysize * GIF_YMAX);
! 408: gif_state.charw = term->h_char; /* gif_state.font->w; */
! 409: gif_state.charh = term->v_char; /* gif_state.font->h; */
! 410: for (i = gif_state.n_colors; i < GIF_N_DEFAULT_COLORS; i++)
! 411: gif_state.rgb_table[i] = gif_color_rgbs[i];
! 412: if (gif_state.n_colors < GIF_N_DEFAULT_COLORS)
! 413: gif_state.n_colors = GIF_N_DEFAULT_COLORS;
! 414: for (i = 0; i < gif_state.n_colors; i++) {
! 415: rgb = gif_state.rgb_table[i];
! 416: gif_state.color_table[i] =
! 417: gdImageColorAllocate(gif_state.image, (rgb >> 16) & 0xff,
! 418: (rgb >> 8) & 0xff, rgb & 0xff);
! 419: }
! 420: if (gif_state.flags & GIF_USE_TRANSPARENT)
! 421: gdImageColorTransparent(gif_state.image,
! 422: gif_state.color_table[0]);
! 423: else
! 424: gdImageColorTransparent(gif_state.image, -1);
! 425: }
! 426:
! 427: /*
! 428: * _text() Called immediately after a plot is displayed. This procedure
! 429: * should set the device back into text mode if it is also a terminal, so
! 430: * that commands can be seen as they're typed. Again, this will probably
! 431: * do nothing if the device can't be used as a terminal.
! 432: */
! 433: TERM_PUBLIC void GIF_text()
! 434: {
! 435: if (gif_state.flags & GIF_USE_INTERLACE)
! 436: gdImageInterlace(gif_state.image, 1);
! 437: gdImageGif(gif_state.image, gpoutfile);
! 438: gdImageDestroy(gif_state.image);
! 439: }
! 440:
! 441: /* _move(x,y) Called at the start of a line. The cursor should move to the
! 442: * (x,y) position without drawing.
! 443: */
! 444: TERM_PUBLIC void GIF_move(unsigned int x, unsigned int y)
! 445: {
! 446: gif_state.x = x;
! 447: gif_state.y = y;
! 448: }
! 449:
! 450: /* _vector(x,y) Called when a line is to be drawn. This should display a line
! 451: * from the last (x,y) position given by _move() or _vector() to this new (x,y)
! 452: * position.
! 453: */
! 454: TERM_PUBLIC void GIF_vector(unsigned int x, unsigned int y)
! 455: {
! 456: int gif_linetype_dotted[5];
! 457:
! 458: if (gif_state.linetype == -1) {
! 459: gif_linetype_dotted[0] = gif_state.color_table[2];
! 460: gif_linetype_dotted[1] = gif_state.color_table[2];
! 461: gif_linetype_dotted[2] = gif_state.color_table[0];
! 462: gif_linetype_dotted[3] = gif_state.color_table[0];
! 463: gif_linetype_dotted[4] = gif_state.color_table[0];
! 464:
! 465: gdImageSetStyle(gif_state.image, gif_linetype_dotted, 5);
! 466: gdImageLine(gif_state.image, gif_state.x, gif_state.height - gif_state.y,
! 467: x, gif_state.height - y, gdStyled);
! 468: } else {
! 469: gdImageLine(gif_state.image, gif_state.x, gif_state.height - gif_state.y,
! 470: x, gif_state.height - y, gif_state.color);
! 471: }
! 472: gif_state.x = x;
! 473: gif_state.y = y;
! 474: }
! 475:
! 476: /* _linetype(lt) Called to set the line type before text is displayed or
! 477: * line(s) plotted. This procedure should select a pen color or line
! 478: * style if the device has these capabilities.
! 479: * lt is an integer from -2 to 0 or greater.
! 480: * An lt of -2 is used for the border of the plot.
! 481: * An lt of -1 is used for the X and Y axes.
! 482: * lt 0 and upwards are used for plots 0 and upwards.
! 483: * If _linetype() is called with lt greater than the available line types,
! 484: * it should map it to one of the available line types.
! 485: * Most drivers provide 9 different linetypes (lt is 0 to 8).
! 486: */
! 487: TERM_PUBLIC void GIF_linetype(int type)
! 488: {
! 489: if (type >= (gif_state.n_colors - 3))
! 490: type %= (gif_state.n_colors - 3);
! 491:
! 492: gif_state.color = gif_state.color_table[type + 3];
! 493: gif_state.linetype = type;
! 494: }
! 495:
! 496: /* _put_text(x,y,str) Called to display text at the (x,y) position,
! 497: * while in graphics mode. The text should be vertically (with respect
! 498: * to the text) justified about (x,y). The text is rotated according
! 499: * to _text_angle and then horizontally (with respect to the text)
! 500: * justified according to _justify_text.
! 501: */
! 502: TERM_PUBLIC void GIF_put_text(unsigned int x, unsigned int y, char *string)
! 503: {
! 504: if (gif_state.angle == 1) {
! 505: x -= gif_state.charh / 2;
! 506: gdImageStringUp(gif_state.image, gif_state.font,
! 507: x, gif_state.height - y,
! 508: string, gif_state.color);
! 509: } else {
! 510: y += gif_state.charh / 2;
! 511: gdImageString(gif_state.image, gif_state.font,
! 512: x, gif_state.height - y,
! 513: string, gif_state.color);
! 514: }
! 515: }
! 516:
! 517: /* _text_angle(ang) Called to rotate the text angle when placing the y label.
! 518: * If ang = 0 then text is horizontal. If ang = 1 then text is vertically
! 519: * upwards. Returns TRUE if text can be rotated, FALSE otherwise.
! 520: */
! 521: TERM_PUBLIC int GIF_text_angle(int ang)
! 522: {
! 523: gif_state.angle = ang;
! 524: return TRUE;
! 525: }
! 526:
! 527: /*
! 528: * Local Variables:
! 529: * mode:C
! 530: * End:
! 531: */
! 532:
! 533: #endif /* TERM_BODY */
! 534: #ifdef TERM_TABLE
! 535:
! 536: TERM_TABLE_START(gif_driver)
! 537: "gif", "GIF format [mode] [fontsize] [size] [colors]",
! 538: GREG_XMAX, GREG_YMAX, GIF_VCHAR, GIF_HCHAR,
! 539: GIF_VTIC, GIF_HTIC, GIF_options, GIF_init, GIF_reset,
! 540: GIF_text, null_scale, GIF_graphics, GIF_move, GIF_vector,
! 541: GIF_linetype, GIF_put_text, GIF_text_angle,
! 542: null_justify_text, do_point, do_arrow, set_font_null,
! 543: 0, /* pointsize */
! 544: TERM_CAN_MULTIPLOT | TERM_BINARY
! 545: TERM_TABLE_END(gif_driver)
! 546:
! 547: #undef LAST_TERM
! 548: #define LAST_TERM gif_driver
! 549:
! 550: #endif /* TERM_TABLE */
! 551: #endif /* TERM_PROTO_ONLY */
! 552:
! 553: #ifdef TERM_HELP
! 554: START_HELP(gif)
! 555: "1 gif",
! 556: "?commands set terminal gif",
! 557: "?set terminal gif",
! 558: "?set term gif",
! 559: "?terminal gif",
! 560: "?term gif",
! 561: "?gif",
! 562: " The `gif` terminal driver generates output in GIF format. It uses Thomas",
! 563: " Boutell's gd library, which is available from http://www.boutell.com/gd/",
! 564: "",
! 565: " Syntax:",
! 566: " set terminal gif {transparent} {interlace}",
! 567: " {small | medium | large}",
! 568: " {size <x>,<y>}",
! 569: " {<color0> <color1> <color2> ...}",
! 570: "",
! 571: " `transparent` instructs the driver to generate transparent GIFs. The first",
! 572: " color will be the transparent one.",
! 573: "",
! 574: " `interlace` instructs the driver to generate interlaced GIFs.",
! 575: "",
! 576: " The choice of fonts is `small` (6x12 pixels), `medium` (7x13 Bold) or `large`",
! 577: " (8x16).",
! 578: "",
! 579: " The size <x,y> is given in pixels---it defaults to 640x480. The number of",
! 580: " pixels can be also modified by scaling with the `set size` command.",
! 581: "",
! 582: " Each color must be of the form 'xrrggbb', where x is the literal character",
! 583: " 'x' and 'rrggbb' are the red, green and blue components in hex. For example,",
! 584: " 'x00ff00' is green. The background color is set first, then the border",
! 585: " colors, then the X & Y axis colors, then the plotting colors. The maximum",
! 586: " number of colors that can be set is 256.",
! 587: "",
! 588: " Examples:",
! 589: " set terminal gif small size 640,480 \\",
! 590: " xffffff x000000 x404040 \\",
! 591: " xff0000 xffa500 x66cdaa xcdb5cd \\",
! 592: " xadd8e6 x0000ff xdda0dd x9500d3 # defaults",
! 593: "",
! 594: " which uses white for the non-transparent background, black for borders, gray",
! 595: " for the axes, and red, orange, medium aquamarine, thistle 3, light blue, blue,",
! 596: " plum and dark violet for eight plotting colors.",
! 597: "",
! 598: " set terminal gif transparent xffffff \\",
! 599: " x000000 x202020 x404040 x606060 \\",
! 600: " x808080 xA0A0A0 xC0C0C0 xE0E0E0 \\",
! 601: " which uses white for the transparent background, black for borders, dark",
! 602: " gray for axes, and a gray-scale for the six plotting colors.",
! 603: "",
! 604: " The page size is 640x480 pixels. The `gif` driver can create either color",
! 605: " or monochromatic output, but you have no control over which is produced.",
! 606: "",
! 607: " The current version of the `gif` driver does not support animated GIFs."
! 608: END_HELP(gif)
! 609: #endif /* TERM_HELP */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>