/* * $Id: $ */ /* GNUPLOT -- mif.trm */ /*[ * Copyright 1992, 1993, 1998 * * Permission to use, copy, and distribute this software and its * documentation for any purpose with or without fee is hereby granted, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation. * * Permission to modify the software is granted, but not the right to * distribute the complete modified source code. Modifications are to * be distributed as patches to the released version. Permission to * distribute binaries produced by compiling modified sources is granted, * provided you * 1. distribute the corresponding source modifications from the * released version in the form of a patch file along with the binaries, * 2. add special version identification to distinguish your version * in addition to the base release version number, * 3. provide your name and address as the primary contact for the * support of your modified version, and * 4. retain our contact information in regard to use of the base * software. * Permission to distribute the released version of the source code along * with corresponding source modifications in the form of a patch file is * granted with same provisions 2 through 4 for binary distributions. * * This software is provided "as is" without express or implied warranty * to the extent permitted by applicable law. ]*/ /* * This file is included by ../term.c. * * This terminal driver was developed for * gnuplot for unix version 3.0 (patchlevel 1) * gnuplot for unix version 3.2 (patchlevel 2) * * This terminal driver supports: * Frame Maker MIF format version 3.00 * * Options for this terminal driver (set terminal mif [options]): * colour / Draw primitives with line types >= 0 in colour (sep. 2-7) * monochrome Draw primitives in black (sep. 0) * * polyline / Draw lines as continous curves * vectors Draw lines as collections of vectors * * help / ? Print short usage description on stderr * * Properties for this terminal driver: * -Gnuplot size of worksheet: MIF_XMAX * MIF_YMAX * -Unit in MIF output: cm * -Plot primitives with the same pen will * be grouped in the same MIF group. * -Plot primitives with line types >= 0 * will as default be drawn in colour. * -Lines are plotted as collections of * vectors, or as continous lines (default) * -Plot primitives in a plot will be in a * Frame in MIF. Several plot Frames will * be collected in one large Frame. * -Point size of MIF output characters: MIF_PSIZE * -Used font for MIF output characters: Times * -Supports vertical text * -points and dots as characters * -character formats for TextLines * * AUTHORS: * Olof Franksson, Physics IV, KTH, S-100 44 Stockholm, Sweden * * NEW TERMINAL FORMAT: David C. Schooley * COMMENTS: * Send comments and/or suggestions to olof@fysik4.kth.se * * CHANGES: * Changed to new terminal format 9/29/95 schooley@ee.gatech.edu * Changed order of routine declarations. olof@fysik4.kth.se * Changed mechanism for pen pattern selection. kssingvo@immd4.informatik.uni-erlangen.de * Support for vertical text. kssingvo@immd4.informatik.uni-erlangen.de * Fixed plot bug for "set size XS,YS", XS/YS > 1. olof@fysik4.kth.se * */ #include "driver.h" #ifdef TERM_REGISTER register_term(mif) #endif #ifdef TERM_PROTO TERM_PUBLIC void MIF_init __PROTO((void)); TERM_PUBLIC void MIF_graphics __PROTO((void)); TERM_PUBLIC void MIF_text __PROTO((void)); TERM_PUBLIC void MIF_linetype __PROTO((int linetype)); TERM_PUBLIC void MIF_move __PROTO((unsigned int x, unsigned int y)); TERM_PUBLIC void MIF_vector __PROTO((unsigned int x, unsigned int y)); TERM_PUBLIC void MIF_put_text __PROTO((unsigned int x, unsigned int y, char *str)); TERM_PUBLIC int MIF_text_angle __PROTO((int ang)); TERM_PUBLIC void MIF_reset __PROTO((void)); TERM_PUBLIC void MIF_options __PROTO((void)); TERM_PUBLIC int MIF_justify_text __PROTO((enum JUSTIFY mode)); TERM_PUBLIC void MIF_point __PROTO((unsigned int x, unsigned int y, int number)); /** Coordinates **/ /* The cast to float is not necessary because we are dividing by a float */ /* On OSK the cast to a float is not allowed in a constant expression wich */ /* is used by the declaration and initialization of mif_line */ /* Converts gnuplot units to MIF units */ #define GNP_TO_MIF(P) ((P) / 1000.0) /* Basic unit: 0.01 mm (15cm -> 15*10*100=15000) */ #define MIF_XMAX 15000 /* Basic unit: 0.01 mm (10cm -> 10*10*100=10000) */ #define MIF_YMAX 10000 #define MIF_XLAST (MIF_XMAX - 1) #define MIF_YLAST (MIF_YMAX - 1) static int insert_mif_line __PROTO((double fx, double fy)); static int proc_group_id __PROTO((int group_id)); static void free_mif_line __PROTO((void)); static void put_mif_line __PROTO((void)); static void MIF_set_font __PROTO((char *)); static void mif_put_point __PROTO((unsigned int x, unsigned int y, int np)); #ifndef cfree # define cfree free #endif /* Declared in ../setshow.c */ extern char term_options[]; /* From version.c */ extern char version[]; extern char patchlevel[]; static struct mif_line { /* Line point structure specification */ float fpos_x; /* Line point X coordinate */ float fpos_y; /* Y coordinate */ struct mif_line *next; /* Pointer to next line point */ struct mif_line *prev; /* Pointer to previous line point */ } mif_line = { /* Current position structure. Adjust for orign. Local for this file. */ GNP_TO_MIF(0), GNP_TO_MIF(MIF_YLAST), &mif_line, &mif_line }; /** Characters **/ #define MIF_PSIZE 9 /* Point size of used characters */ #define MIF_VCHAR (MIF_YMAX/31) /* Distance between rows (a guess) */ #define MIF_HCHAR (MIF_XMAX/95) /* Distance between characters (a guess) */ /** Scale marks **/ #define MIF_VTIC (MIF_YMAX/150) /* Size of scale mark (vert) */ #define MIF_HTIC (MIF_XMAX/225) /* Size of scale mark (hor) */ /** Drawing properties **/ static char mif_justify[64]; /* How to justify the used text */ static char mif_pen[64], mif_pen_width[64], mif_separation[64]; /* How to plot */ #define MIF_TEXT_HOR 0 #define MIF_TEXT_VER 1 static int mif_text_ang = MIF_TEXT_HOR; /* Rotation angle of text */ #define MIF_NPENS 16 /* Number of MIF pen types */ static int mif_pentype = 0; /* Pen type to use. Also used to create groups for graphics */ #define MIF_PEN_TO_GROUP(P) ( 1 + (P) ) /* Map pen type to group number. Must be >= 1 */ static int mif_pattern_table[MIF_NPENS] = { /* Table, which pattern should be used for drawing */ 0, /* border */ 1, /* not used */ 2, 3, 4, 8, 12, 13, /* other lines: functions, data, ... (5 is used for grid; 6,7 is (nearly) invisible) */ 5, /* grid */ 9, 10, 11, 12, 13, 14, 15 /* not used */ }; /** MIF groups administration **/ #define MIF_NGROUP_ID 20 static struct mif_group_id { int group_existance; /* This group id should generate a MIF group */ #define MIF_GROUP_EXISTS 1 /* This group id should not generate a MIF group */ #define MIF_GROUP_NOT_EXISTS 0 int group_id; #define MIF_INVALID_GROUP_ID 0 /* An invalid MIF group ID */ } mif_group_id[MIF_NGROUP_ID]; /* List of used group ID:s and corresponding MIF groups existance */ /** Semaphores **/ static int mif_initialized = 0; /* != 0 when output is active */ static int mif_in_frame = 0; /* != 0 when inside a plot frame */ static int mif_frameno = -1; /* Current frame number */ static int mif_colour = TRUE; /* == TRUE when colour should be used */ static int mif_polyline = TRUE; /* == TRUE when lines are drawn as continous curves */ struct mpt { /* point definition structure */ int chr; /* character for point */ float x_offset, y_offset; /* offset for vertical positioning */ char *font; /* font */ }; char zgnuplot[] = "ZGnuplot"; /* character formats */ char zgnuplotp[] = "ZGnuplotP"; char zgnuplotd[] = "ZGnuplotD"; char *mif_font = NULL; /* actual character format */ struct mpt mpt[POINT_TYPES + 1] = { /* point definition data */ {'.', 0.000, 0.005, zgnuplotd, /* dot */ }, {'G', 0.002, 0.084, zgnuplotp, /* diamond */ }, {';', 0.002, 0.084, zgnuplotp, /* plus */ }, {'n', 0.002, 0.084, zgnuplotp, /* box */ }, {'5', 0.002, 0.084, zgnuplotp, /* X */ }, {'s', 0.002, 0.062, zgnuplotp, /* triangle */ }, {'K', 0.005, 0.075, zgnuplotp, /* star */ }, }; /* diamond is offset 0, dot is offset -1 */ struct mpt *mif_point = &(mpt[1]); #endif #ifndef TERM_PROTO_ONLY #ifdef TERM_BODY /** Declaration of routine/s for internal use **/ static int insert_mif_line __PROTO((double fx, double fy)); static int proc_group_id __PROTO((int group_id)); /** Routine/s **/ /* Called when this terminal type is set in order to parse options */ TERM_PUBLIC void MIF_options() { if (!END_OF_COMMAND) { /* Colour options */ if (!END_OF_COMMAND && almost_equals(c_token, "m$onochrome")) { /* Compare up to $ */ mif_colour = FALSE; c_token++; } if (!END_OF_COMMAND && (almost_equals(c_token, "c$olor") || almost_equals(c_token, "c$olour"))) { /* Compare up to $ */ mif_colour = TRUE; c_token++; } /* Curve options */ if (!END_OF_COMMAND && almost_equals(c_token, "v$ectors")) { /* Compare up to $ */ mif_polyline = FALSE; c_token++; } if (!END_OF_COMMAND && almost_equals(c_token, "p$olyline")) { /* Compare up to $ */ mif_polyline = TRUE; c_token++; } /* Short help */ if (!END_OF_COMMAND && (almost_equals(c_token, "h$elp") || almost_equals(c_token, "?$"))) { /* Compare up to $ */ fprintf(stderr, "\ Usage: set terminal mif [options]\n\ \toptions:\n\ \t\tcolour / Draw primitives with line types >= 0 in colour (sep. 2-7)\n\ \t\tmonochrome Draw primitives in black (sep. 0)\n\n\ \t\tpolyline / Draw lines as continous curves\n\ \t\tvectors Draw lines as collections of vectors\n\n\ \t\thelp / ? Print short usage description on stderr\n"); c_token++; } } sprintf(term_options, "%s %s", (mif_colour == TRUE) ? "colour" : "monochrome", (mif_polyline == TRUE) ? "polyline" : "vectors"); } /* Deallocate the used line structure elements */ static void free_mif_line() { struct mif_line *tline; while (mif_line.prev != &mif_line) { /* Unlink */ tline = mif_line.prev; mif_line.prev = mif_line.prev->prev; mif_line.prev->next = &mif_line; /* Deallocate */ free(tline); } /* Make sure that the list will be empty */ mif_line.prev = &mif_line; mif_line.next = &mif_line; } /* Draw the pending line. Change current position. */ static void put_mif_line() { int np, i; struct mif_line *tline; /* Process if inside a Frame */ if (mif_initialized != 0 && mif_in_frame != 0) { /* Count the number of available points */ for (tline = mif_line.next, np = 1; tline != &mif_line; tline = tline->next, np++); /* Draw line (at least two points) */ if (np >= 2) { /* Line preamble */ fprintf(gpoutfile, "\t %s %s %s\n", MIF_PEN_TO_GROUP(mif_pentype), mif_pen, mif_pen_width, mif_separation); /* Draw the line elements */ fprintf(gpoutfile, "\t\t ", np); for (i = 0, tline = &mif_line; i < np; i++, tline = tline->next) { if (i % 4 == 0) fputs("\n\t\t", gpoutfile); fprintf(gpoutfile, " ", tline->fpos_x, tline->fpos_y); } /* Line post amble */ fputs("\n\t>\n", gpoutfile); /* Register the used group ID */ proc_group_id(MIF_PEN_TO_GROUP(mif_pentype)); /* Avoid to redraw this. The MIF system should remember it. */ mif_pen[0] = '\0'; mif_pen_width[0] = '\0'; mif_separation[0] = '\0'; /* Move current position to end of line */ mif_line.fpos_x = mif_line.prev->fpos_x; mif_line.fpos_y = mif_line.prev->fpos_y; /* Restore the line */ free_mif_line(); } } /* Line processed */ } /* Draw a point */ static void mif_put_point(x, y, np) unsigned int x, y; int np; { /* Process if inside a Frame */ if (mif_initialized != 0 && mif_in_frame != 0) { /* Draw pending line */ if (mif_polyline == TRUE) put_mif_line(); /* Adjust current position for text-graphics alignment */ MIF_move(x, y); /* center text */ MIF_justify_text(CENTRE); /* Draw the point */ fprintf(gpoutfile, "\t\n", MIF_PEN_TO_GROUP(mif_pentype)); MIF_set_font(mif_point[np].font); fprintf(gpoutfile, "\t\t %s \n", mif_line.fpos_x + mif_point[np].x_offset, mif_line.fpos_y + mif_point[np].y_offset, mif_justify, mif_point[np].chr); fputs("\t>\n", gpoutfile); /* Register the used group ID */ proc_group_id(MIF_PEN_TO_GROUP(mif_pentype)); /* Avoid to redraw this. The MIF system should remember it. */ mif_justify[0] = '\0'; } /* Point processed */ } /* * draw points */ TERM_PUBLIC void MIF_point(x, y, number) unsigned int x, y; int number; { if (number < 0) { /* dot */ number = -1; } else { /* point */ number %= POINT_TYPES; } mif_put_point(x, y, number); } /* Set up a MIF output file */ TERM_PUBLIC void MIF_init() { int i; /* Process if not inside a MIF file and Frame */ if (mif_initialized == 0 && mif_in_frame == 0) { /* Tell this terminal driver that the output is initialized and no current frames are processed */ mif_initialized = 1; mif_in_frame = 0; /* Reset internal position */ free_mif_line(); mif_line.fpos_x = GNP_TO_MIF(0); mif_line.fpos_y = GNP_TO_MIF(MIF_YLAST); /* Reset drawing properties strings */ mif_pen[0] = '\0'; mif_pen_width[0] = '\0'; mif_separation[0] = '\0'; MIF_justify_text(LEFT); /* Reset group ID generator */ for (i = 0; i < MIF_NGROUP_ID; i++) { mif_group_id[i].group_id = MIF_INVALID_GROUP_ID; mif_group_id[i].group_existance = MIF_GROUP_NOT_EXISTS; } /* Identify ourselves */ /*bs show borders */ /* Setup a default environment to use */ fprintf(gpoutfile, "\ # Generated by gnuplot version %s patchlevel %s; identifies this as a MIF file\n\ #\n\ # show borders\n\ \n>\n\ # Set a default pen pattern, pen width, unit and font for subsequent objects\n\ \n\ \n\ \n\ \n\ \n\ >\n\ \t>\n\ \t>\n\ >\n\ #\n", version, patchlevel, zgnuplot, MIF_PSIZE, zgnuplotp, zgnuplotd); } /* MIF file created */ } /* Finish of a MIF output file */ TERM_PUBLIC void MIF_reset() { /* Process if inside a MIF file and not inside a Frame */ if (mif_initialized != 0 && mif_in_frame == 0) { /* Finish off the MIF file */ fputs("\ #\n\ # End of MIFFile\n", gpoutfile); /* Tell this terminal driver that the output is finished */ mif_initialized = 0; /* bs: reset frame number */ mif_frameno = -1; } /* MIF file finished */ } /* Start plotting a Frame (-> graphics mode) */ TERM_PUBLIC void MIF_graphics() { int i; /* Process if not inside a Frame */ if (mif_initialized != 0 && mif_in_frame == 0) { /* Tell that this terminal driver is working with a plot frame */ mif_in_frame = 1; /* Update frame number */ mif_frameno++; /* Set current position */ free_mif_line(); mif_line.fpos_x = GNP_TO_MIF(0); mif_line.fpos_y = GNP_TO_MIF(MIF_YLAST); /* Set drawing properties */ mif_pen[0] = '\0'; mif_pen_width[0] = '\0'; mif_separation[0] = '\0'; MIF_justify_text(LEFT); /* Reset group ID generator */ for (i = 0; i < MIF_NGROUP_ID; i++) { mif_group_id[i].group_id = MIF_INVALID_GROUP_ID; mif_group_id[i].group_existance = MIF_GROUP_NOT_EXISTS; } /* Frame preamble */ fprintf(gpoutfile, "\ #\n\ # Frame number %d with plot of graphics\n\ \n\ \t\n\ \t\n\ \t\n\ \t\n\ \t\n\ \t\n", mif_frameno, ((float) mif_frameno) * GNP_TO_MIF(MIF_YMAX + 100), GNP_TO_MIF(MIF_XMAX), GNP_TO_MIF(MIF_YMAX)); } /* Frame created */ } /* Stop plotting a Frame (-> text mode) */ TERM_PUBLIC void MIF_text() { int i; /* Process if inside a Frame */ if (mif_initialized != 0 && mif_in_frame != 0) { /* Draw pending line */ if (mif_polyline == TRUE) put_mif_line(); /* Group the used plot primitives */ fputs("\ \t#\n\ \t# Group the the objects in groups to make the chart easier to manipulate\n\ \t# after it's imported into FrameMaker.\n", gpoutfile); for (i = 0; i < MIF_NGROUP_ID; i++) { if (mif_group_id[i].group_id != MIF_INVALID_GROUP_ID && mif_group_id[i].group_existance == MIF_GROUP_EXISTS) { fprintf(gpoutfile, "\ \t\n\ \t>\n", mif_group_id[i].group_id); } } /* Frame post amble */ fprintf(gpoutfile, "\ >\n\ # End of Frame number %d\n\ #\n", mif_frameno); /* Tell that this terminal driver is not working with a plot frame */ mif_in_frame = 0; } /* Frame finshed */ } /* Select type of line in grapics */ /* NOTE: actually written to output the first time a primitive * is drawn AFTER this call */ TERM_PUBLIC void MIF_linetype(linetype) /* -2=border, -1=X/Y-axis, 0-13=lines, and 14-=mapped back */ int linetype; { /* Process if inside a Frame */ if (mif_initialized != 0 && mif_in_frame != 0) { /* Draw pending line */ if (mif_polyline == TRUE) put_mif_line(); /* Translate gnuplot pen types to MIF pen types */ if (linetype < 0) { /* Special lines */ if (linetype == -1) { mif_pentype = 8 + MIF_NPENS; /* -1 */ if (mif_colour == TRUE) sprintf(mif_separation, " "); } else { mif_pentype = 0 + MIF_NPENS; /* -2 or less */ if (mif_colour == TRUE) sprintf(mif_separation, " "); } sprintf(mif_pen_width, " "); } else { /* Normal lines */ mif_pentype = (linetype) % MIF_NPENS; /* 0-(MIF_NPENS-1) */ sprintf(mif_pen_width, " "); if (mif_colour == TRUE) sprintf(mif_separation, " ", 2 + (mif_pentype % 6)); /* 2-7 */ } /* Set pen type */ sprintf(mif_pen, " ", mif_pattern_table[mif_pentype % MIF_NPENS]); } /* Primitive processed */ } /* Draw the text horisontally or vertically (90 degrees counterclockwise) */ TERM_PUBLIC int MIF_text_angle(ang) int ang; { if (ang != 0) mif_text_ang = MIF_TEXT_VER; else mif_text_ang = MIF_TEXT_HOR; return (TRUE); } /* Justify following text lines (MIF_put_text()) relative to the insertion point */ TERM_PUBLIC int MIF_justify_text(mode) /* NOTE: actually written to output in text primitives which are * drawn AFTER this call */ enum JUSTIFY mode; { int rval = TRUE; /* Process if inside a Frame */ if (mif_initialized != 0 && mif_in_frame != 0) { switch (mode) { case LEFT: sprintf(mif_justify, " "); break; case CENTRE: sprintf(mif_justify, " "); break; case RIGHT: sprintf(mif_justify, " "); break; default: rval = FALSE; break; } } /* Primitive processed */ else { rval = FALSE; } return (rval); } /* Draw a vector from current position to (x, y) and change current position. */ /* NOTE: actually written to output the first time another primitive * is called AFTER this call */ TERM_PUBLIC void MIF_vector(x, y) unsigned int x, y; { /* Process if inside a Frame */ if (mif_initialized != 0 && mif_in_frame != 0) { /* Setup the vector as a part of the line */ insert_mif_line(GNP_TO_MIF(x), GNP_TO_MIF(MIF_YLAST - (int) y)); /* Draw pending line -> vector */ if (mif_polyline == FALSE) put_mif_line(); } /* Vector processed */ } /* Move current position */ TERM_PUBLIC void MIF_move(x, y) unsigned int x, y; { /* Process if inside a Frame */ if (mif_initialized != 0 && mif_in_frame != 0) { /* Draw pending line */ if (mif_polyline == TRUE) put_mif_line(); mif_line.fpos_x = GNP_TO_MIF(x); mif_line.fpos_y = GNP_TO_MIF(MIF_YLAST - (int) y); } } /* set font */ static void MIF_set_font(font) char *font; { if (font != mif_font) { fprintf(gpoutfile, "\t\t\n\t\t>\n", font); mif_font = font; } } /* Draw the text string str at (x, y). Adjust according to MIF_justify_text(). * Change current position. */ TERM_PUBLIC void MIF_put_text(x, y, str) unsigned int x, y; char str[]; { /* Process if inside a Frame */ if (mif_initialized != 0 && mif_in_frame != 0) { /* Draw pending line */ if (mif_polyline == TRUE) put_mif_line(); /* Adjust current position for text-graphics alignment */ MIF_move(x, y - MIF_VCHAR / 5); if (strlen(str) > 0) { /* Draw the text */ fprintf(gpoutfile, "\t %s %s %s\n", MIF_PEN_TO_GROUP(mif_pentype), mif_pen, mif_pen_width, mif_separation); MIF_set_font(zgnuplot); fprintf(gpoutfile, "\ \t\t %s %s \n\ \t>\n", mif_line.fpos_x, mif_line.fpos_y, mif_justify, (mif_text_ang == MIF_TEXT_VER) ? "" : "", str); /* Register the used group ID */ proc_group_id(MIF_PEN_TO_GROUP(mif_pentype)); /* Avoid to redraw this. The MIF system should remember it. */ mif_pen[0] = '\0'; mif_pen_width[0] = '\0'; mif_separation[0] = '\0'; mif_justify[0] = '\0'; /* Independent of linetype */ } } /* Text processed */ } /* Insert one point in the line */ static int insert_mif_line(fx, fy) double fx, fy; { int rval = TRUE; if ((mif_line.prev->next = (struct mif_line *) gp_alloc(sizeof(struct mif_line), "MIF driver")) != (struct mif_line *) NULL) { /* Link */ mif_line.prev->next->next = &mif_line; mif_line.prev->next->prev = mif_line.prev; mif_line.prev = mif_line.prev->next; /* Fill */ mif_line.prev->fpos_x = fx; mif_line.prev->fpos_y = fy; rval = TRUE; } else { /* Failed to allocate */ /* Relink */ mif_line.prev->next = &mif_line; rval = FALSE; } return (rval); } /* Register group ID. Update group ID existance. */ /* Returns: 1 group_id belongs to a MIF group 0 group_id does not belong to a MIF group -1 not inside a Frame -2 group ID list is full */ static int proc_group_id(group_id) int group_id; { int i, rval = 0; /* Process if inside a Frame */ if (mif_initialized != 0 && mif_in_frame != 0) { /* Find out the group ID, or a free group ID slot index. */ for (i = 0; i < MIF_NGROUP_ID && mif_group_id[i].group_id != MIF_INVALID_GROUP_ID && mif_group_id[i].group_id != group_id; i++) { /* Don't check the group_existance variable */ } if (i < MIF_NGROUP_ID) { if (mif_group_id[i].group_id == MIF_INVALID_GROUP_ID) { /* Register as new group ID for eventual use as MIF group */ mif_group_id[i].group_id = group_id; mif_group_id[i].group_existance = MIF_GROUP_NOT_EXISTS; } else { /* If second use of this group ID -> create a new MIF group */ if (mif_group_id[i].group_id == group_id) { mif_group_id[i].group_existance = MIF_GROUP_EXISTS; /* NOTE: a group MUST have at least two members. */ rval = 1; } } } else { rval = -2; /* No place for this group ID in the list */ } } /* Group ID processed */ else { rval = -1; /* Not inside a Frame */ } /* Return MIF group status */ return (rval); } #endif #ifdef TERM_TABLE TERM_TABLE_START(mif_driver) "mif", "Frame maker MIF 3.00 format", MIF_XMAX, MIF_YMAX, MIF_VCHAR, MIF_HCHAR, MIF_VTIC, MIF_HTIC, MIF_options, MIF_init, MIF_reset, MIF_text, null_scale, MIF_graphics, MIF_move, MIF_vector, MIF_linetype, MIF_put_text, MIF_text_angle, MIF_justify_text, MIF_point, do_arrow, set_font_null TERM_TABLE_END(mif_driver) #undef LAST_TERM #define LAST_TERM mif_driver #endif #endif /* TERM_PROTO_ONLY */ #ifdef TERM_HELP START_HELP(mif) "1 mif", "?commands set terminal mif", "?set terminal mif", "?set term mif", "?terminal mif", "?term mif", "?mif", " The `mif` terminal driver produces Frame Maker MIF format version 3.00. It", " plots in MIF Frames with the size 15*10 cm, and plot primitives with the same", " pen will be grouped in the same MIF group. Plot primitives in a `gnuplot`", " page will be plotted in a MIF Frame, and several MIF Frames are collected in", " one large MIF Frame. The MIF font used for text is \"Times\".", "", " Several options may be set in the MIF 3.00 driver.", "", " Syntax:", " set terminal mif {colour | monochrome} {polyline | vectors}", " {help | ?}", "", " `colour` plots lines with line types >= 0 in colour (MIF sep. 2--7) and", " `monochrome` plots all line types in black (MIF sep. 0).", " `polyline` plots curves as continuous curves and `vectors` plots curves as", " collections of vectors.", " `help` and `?` print online help on standard error output---both print a", " short description of the usage; `help` also lists the options;", "", " Examples:", " set term mif colour polylines # defaults", " set term mif # defaults", " set term mif vectors", " set term mif help" END_HELP(mif) #endif /* TERM_HELP */