[BACK]Return to texdraw.trm CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gnuplot / term

Annotation of OpenXM_contrib/gnuplot/term/texdraw.trm, Revision 1.1

1.1     ! maekawa     1: /*
        !             2:  * $Id: texdraw.trm,v 1.15 1998/06/18 14:59:26 ddenholm Exp $
        !             3:  */
        !             4:
        !             5: /* GNUPLOT - texdraw.trm */
        !             6:
        !             7: /*[
        !             8:  * Copyright 1990 - 1993, 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:  *   The TEXDRAW macros for LaTeX.
        !            42:  *
        !            43:  * AUTHORS
        !            44:  *   Khun Yee Fung. Modified from eepic.trm.
        !            45:  *   clipper@csd.uwo.ca
        !            46:  *   January 20, 1992
        !            47:  *
        !            48:  * send your comments or suggestions to (info-gnuplot@dartmouth.edu).
        !            49:  *
        !            50:  */
        !            51:
        !            52: /*
        !            53:  *  This file contains the texdraw terminal driver, intended for use with the
        !            54:  *  texdraw macro package for LaTeX. This is an alternative to the
        !            55:  *  latex driver. You need texdraw.sty, and texdraw.tex in the texdraw package.
        !            56:  *
        !            57:  */
        !            58: #include "driver.h"
        !            59:
        !            60: #ifdef TERM_REGISTER
        !            61: register_term(texdraw)
        !            62: #endif
        !            63:
        !            64: #ifdef TERM_PROTO
        !            65: TERM_PUBLIC void TEXDRAW_init __PROTO((void));
        !            66: TERM_PUBLIC void TEXDRAW_graphics __PROTO((void));
        !            67: TERM_PUBLIC void TEXDRAW_text __PROTO((void));
        !            68: TERM_PUBLIC void TEXDRAW_linetype __PROTO((int linetype));
        !            69: TERM_PUBLIC void TEXDRAW_move __PROTO((unsigned int x, unsigned int y));
        !            70: TERM_PUBLIC void TEXDRAW_point __PROTO((unsigned int x, unsigned int y,
        !            71:                                        int number));
        !            72: TERM_PUBLIC void TEXDRAW_vector __PROTO((unsigned int ux, unsigned int uy));
        !            73: TERM_PUBLIC void TEXDRAW_arrow __PROTO((unsigned int sx, unsigned int sy,
        !            74:                                        unsigned int ex, unsigned int ey,
        !            75:                                        TBOOLEAN head));
        !            76: TERM_PUBLIC void TEXDRAW_put_text __PROTO((unsigned int x, unsigned int y,
        !            77:                                           char str[]));
        !            78: TERM_PUBLIC int TEXDRAW_justify_text __PROTO((enum JUSTIFY mode));
        !            79: TERM_PUBLIC int TEXDRAW_text_angle __PROTO((int ang));
        !            80: TERM_PUBLIC void TEXDRAW_reset __PROTO((void));
        !            81:
        !            82: #define TEXDRAW_PTS_PER_INCH (72.27)
        !            83: /* resolution of printer we expect to use */
        !            84: #define DOTS_PER_INCH (300)
        !            85: /* dot size in pt */
        !            86: #define TEXDRAW_UNIT (TEXDRAW_PTS_PER_INCH/DOTS_PER_INCH)
        !            87:
        !            88: /* 5 inches wide by 3 inches high (default) */
        !            89: #define TEXDRAW_XMAX (5*DOTS_PER_INCH)
        !            90: #define TEXDRAW_YMAX (3*DOTS_PER_INCH)
        !            91:
        !            92: #define TEXDRAW_HTIC (5*DOTS_PER_INCH/72)      /* (5./TEXDRAW_UNIT) */
        !            93: #define TEXDRAW_VTIC (5*DOTS_PER_INCH/72)      /* (5./TEXDRAW_UNIT) */
        !            94: #define TEXDRAW_HCHAR (DOTS_PER_INCH*53/10/72) /* (5.3/TEXDRAW_UNIT) */
        !            95: #define TEXDRAW_VCHAR (DOTS_PER_INCH*11/72)    /* (11./TEXDRAW_UNIT) */
        !            96:
        !            97: #define GOT_TEXDRAW_PROTO
        !            98: #endif
        !            99:
        !           100: #ifndef TERM_PROTO_ONLY
        !           101: #ifdef TERM_BODY
        !           102: static void TEXDRAW_endline __PROTO((void));
        !           103: static unsigned int TEXDRAW_posx;
        !           104: static unsigned int TEXDRAW_posy;
        !           105: enum JUSTIFY TEXDRAW_justify = LEFT;
        !           106: enum JUSTIFY TEXDRAW_last_justify = LEFT;
        !           107: static int TEXDRAW_angle = 0;
        !           108: static float TEXDRAW_scalefactor = 0.2409;
        !           109: static double TEXDRAW_xscale = 1.0, TEXDRAW_yscale = 1.0;
        !           110:
        !           111: /* for DOTS point style */
        !           112: #define TEXDRAW_TINY_DOT "\\htext{$\\cdot$}"
        !           113:
        !           114: /* POINTS */
        !           115: #define TEXDRAW_POINT_TYPES 12 /* we supply more point types */
        !           116: static char GPFAR *GPFAR TEXDRAW_points[] =
        !           117: {
        !           118:     "\\rmove(0 4)\\htext{$\\Diamond$}",
        !           119:     "\\htext{$+$}",
        !           120:     "\\rmove(0 4)\\htext{$\\Box$}",
        !           121:     "\\htext{$\\times$}",
        !           122:     "\\htext{$\\triangle$}",
        !           123:     "\\htext{$\\star$}",
        !           124:     "\\lcir r:9",
        !           125:     "\\lcir r:12",
        !           126:     "\\lcir r:16",
        !           127:     "\\fcir f:0.9 r:9",
        !           128:     "\\fcir f:0.9 r:12",
        !           129:     "\\fcir f:0.9 r:16"
        !           130: };
        !           131:
        !           132: /* LINES */
        !           133: #define TEXDRAW_NUMLINES 5     /* number of linetypes below */
        !           134: static int TEXDRAW_lines[] =
        !           135: {
        !           136:     4,                         /* -2 border */
        !           137:     3,                         /* -1 axes */
        !           138:     3,                         /*  0 solid thin  */
        !           139:     4,                         /*  1 solid thick */
        !           140:     6,                         /*  2 solid Thick */
        !           141: };
        !           142:
        !           143: /* The line type selected most recently */
        !           144: static int TEXDRAW_last_type = 0;
        !           145: /* current line type */
        !           146: static int TEXDRAW_type;
        !           147: /* are we in the middle of a line */
        !           148: static TBOOLEAN TEXDRAW_inline = FALSE;
        !           149: /* terminate any line in progress */
        !           150: static void TEXDRAW_endline __PROTO((void));
        !           151: /* number of points in line so far */
        !           152: static int TEXDRAW_linecount = 0;
        !           153: /* max value for linecount */
        !           154: #define TEXDRAW_LINEMAX 5
        !           155:
        !           156: TERM_PUBLIC void TEXDRAW_init()
        !           157: {
        !           158:     TEXDRAW_posx = TEXDRAW_posy = 0;
        !           159:     TEXDRAW_linetype(-1);
        !           160:     fputs("%% GNUPLOT: LaTeX using TEXDRAW macros\n", gpoutfile);
        !           161: }
        !           162:
        !           163: TERM_PUBLIC void TEXDRAW_graphics()
        !           164: {
        !           165:     static char GPFAR tdg1[] = "\
        !           166: \\begin{texdraw}\n\
        !           167: \\normalsize\n\
        !           168: \\ifx\\pathDEFINED\\relax\\else\\let\\pathDEFINED\\relax\n\
        !           169:  \\def\\QtGfr{\\ifx (\\TGre \\let\\YhetT\\cpath\\else\\let\\YhetT\\relax\\fi\\YhetT}\n\
        !           170:  \\def\\path (#1 #2){\\move (#1 #2)\\futurelet\\TGre\\QtGfr}\n\
        !           171:  \\def\\cpath (#1 #2){\\lvec (#1 #2)\\futurelet\\TGre\\QtGfr}\n\
        !           172: \\fi\n\
        !           173: \\drawdim pt\n\
        !           174: \\setunitscale %2.2f\n\
        !           175: \\linewd %d\n\
        !           176: \\textref h:L v:C\n";
        !           177:     fprintf(gpoutfile, tdg1,
        !           178:            TEXDRAW_scalefactor,
        !           179:            TEXDRAW_lines[2]);
        !           180:     TEXDRAW_last_type = 0;
        !           181:     TEXDRAW_type = 0;
        !           182: }
        !           183:
        !           184: TERM_PUBLIC void TEXDRAW_text()
        !           185: {
        !           186:     TEXDRAW_endline();
        !           187:     fputs("\\end{texdraw}\n", gpoutfile);
        !           188: }
        !           189:
        !           190: TERM_PUBLIC void TEXDRAW_linetype(linetype)
        !           191: int linetype;
        !           192: {
        !           193:     TEXDRAW_endline();
        !           194:
        !           195:     if (linetype >= TEXDRAW_NUMLINES - 2)
        !           196:        linetype %= (TEXDRAW_NUMLINES - 2);
        !           197:
        !           198:     TEXDRAW_type = linetype;
        !           199: }
        !           200:
        !           201: TERM_PUBLIC void TEXDRAW_move(x, y)
        !           202: unsigned int x, y;
        !           203: {
        !           204:     TEXDRAW_endline();
        !           205:
        !           206:     TEXDRAW_posx = x;
        !           207:     TEXDRAW_posy = y;
        !           208: }
        !           209:
        !           210: TERM_PUBLIC void TEXDRAW_point(x, y, number)
        !           211: unsigned int x, y;
        !           212: int number;
        !           213: {
        !           214:     TEXDRAW_move(x, y);
        !           215:
        !           216:     /* Print the character defined by 'number'; number < 0 means
        !           217:      * to use a dot, otherwise one of the defined points. */
        !           218:     fprintf(gpoutfile, "\\move (%d %d)\n",
        !           219:            (int) ((double) x * TEXDRAW_xscale),
        !           220:            (int) ((double) y * TEXDRAW_yscale));
        !           221:     if (TEXDRAW_last_justify != CENTRE) {
        !           222:        fprintf(gpoutfile, "\\textref h:C v:C ");
        !           223:        TEXDRAW_last_justify = CENTRE;
        !           224:     }
        !           225:     fprintf(gpoutfile, "%s\n",
        !           226:            (number < 0 ?
        !           227:             TEXDRAW_TINY_DOT :
        !           228:             TEXDRAW_points[number % TEXDRAW_POINT_TYPES]));
        !           229: }
        !           230:
        !           231: TERM_PUBLIC void TEXDRAW_vector(ux, uy)
        !           232: unsigned int ux, uy;
        !           233: {
        !           234:     if (!TEXDRAW_inline) {
        !           235:        TEXDRAW_inline = TRUE;
        !           236:
        !           237:        /* Start a new line. This depends on line type */
        !           238:        if (TEXDRAW_type != TEXDRAW_last_type) {
        !           239:            if (TEXDRAW_lines[TEXDRAW_type + 2] != TEXDRAW_lines[TEXDRAW_last_type + 2])
        !           240:                fprintf(gpoutfile, "\\linewd %d\n", TEXDRAW_lines[TEXDRAW_type + 2]);
        !           241:            TEXDRAW_last_type = TEXDRAW_type;
        !           242:        }
        !           243:        fprintf(gpoutfile, "\\path (%d %d)",
        !           244:                (int) ((double) TEXDRAW_posx * TEXDRAW_xscale),
        !           245:                (int) ((double) TEXDRAW_posy * TEXDRAW_yscale));
        !           246:        TEXDRAW_linecount = 1;
        !           247:     } else {
        !           248:        /* Even though we are in middle of a path,
        !           249:         * we may want to start a new path command.
        !           250:         * If they are too long then latex will choke.
        !           251:         */
        !           252:        if (TEXDRAW_linecount++ >= TEXDRAW_LINEMAX) {
        !           253:            fputs("\n\\cpath ", gpoutfile);
        !           254:            TEXDRAW_linecount = 1;
        !           255:        }
        !           256:     }
        !           257:     fprintf(gpoutfile, "(%d %d)",
        !           258:            (int) ((double) ux * TEXDRAW_xscale),
        !           259:            (int) ((double) uy * TEXDRAW_yscale));
        !           260:     TEXDRAW_posx = ux;
        !           261:     TEXDRAW_posy = uy;
        !           262: }
        !           263:
        !           264: static void TEXDRAW_endline()
        !           265: {
        !           266:     if (TEXDRAW_inline) {
        !           267:        putc('\n', gpoutfile);
        !           268:        TEXDRAW_inline = FALSE;
        !           269:     }
        !           270: }
        !           271:
        !           272: TERM_PUBLIC void TEXDRAW_arrow(sx, sy, ex, ey, head)
        !           273: unsigned int sx, sy, ex, ey;
        !           274: TBOOLEAN head;
        !           275: {
        !           276:     char text;
        !           277:
        !           278:     if (head)
        !           279:        text = 'a';
        !           280:     else
        !           281:        text = 'l';
        !           282:     fprintf(gpoutfile, "\\move (%d %d)\\%cvec (%d %d)",
        !           283:            (int) ((double) sx * TEXDRAW_xscale),
        !           284:            (int) ((double) sy * TEXDRAW_yscale),
        !           285:            text,
        !           286:            (int) ((double) ex * TEXDRAW_xscale),
        !           287:            (int) ((double) ey * TEXDRAW_yscale));
        !           288:     TEXDRAW_posx = ex;
        !           289:     TEXDRAW_posy = ey;
        !           290: }
        !           291:
        !           292: TERM_PUBLIC void TEXDRAW_put_text(x, y, str)
        !           293: unsigned int x, y;             /* reference point of string */
        !           294: char str[];                    /* the text */
        !           295: {
        !           296:     char text;
        !           297:
        !           298:     TEXDRAW_endline();
        !           299:
        !           300:     fprintf(gpoutfile, "\\move (%d %d)",
        !           301:            (int) ((double) x * TEXDRAW_xscale),
        !           302:            (int) ((double) y * TEXDRAW_yscale));
        !           303:
        !           304:     if (!TEXDRAW_angle)
        !           305:        text = 'h';
        !           306:     else
        !           307:        text = 'v';
        !           308:
        !           309:     if (TEXDRAW_last_justify != TEXDRAW_justify) {
        !           310:        TEXDRAW_last_justify = TEXDRAW_justify;
        !           311:        if (TEXDRAW_justify == LEFT)
        !           312:            fputs("\\textref h:L v:C ", gpoutfile);
        !           313:        else if (TEXDRAW_justify == CENTRE)
        !           314:            fputs("\\textref h:C v:C ", gpoutfile);
        !           315:        else if (TEXDRAW_justify == RIGHT)
        !           316:            fputs("\\textref h:R v:C ", gpoutfile);
        !           317:     }
        !           318:     fprintf(gpoutfile, "\\%ctext{%s}\n", text, str);
        !           319: }
        !           320:
        !           321:
        !           322: TERM_PUBLIC int TEXDRAW_justify_text(mode)
        !           323: enum JUSTIFY mode;
        !           324: {
        !           325:     TEXDRAW_justify = mode;
        !           326:     return (TRUE);
        !           327: }
        !           328:
        !           329: TERM_PUBLIC int TEXDRAW_text_angle(ang)
        !           330: int ang;
        !           331: {
        !           332:     TEXDRAW_angle = ang;
        !           333:     return (TRUE);
        !           334: }
        !           335:
        !           336: TERM_PUBLIC void TEXDRAW_reset()
        !           337: {
        !           338:     TEXDRAW_endline();
        !           339:     TEXDRAW_posx = TEXDRAW_posy = 0;
        !           340: }
        !           341:
        !           342: #endif /* TERM_BODY */
        !           343:
        !           344: #ifdef TERM_TABLE
        !           345:
        !           346: TERM_TABLE_START(texdraw_driver)
        !           347:     "texdraw",
        !           348:     "LaTeX texdraw environment",
        !           349:     TEXDRAW_XMAX, TEXDRAW_YMAX, TEXDRAW_VCHAR, TEXDRAW_HCHAR,
        !           350:     TEXDRAW_VTIC, TEXDRAW_HTIC, options_null, TEXDRAW_init, TEXDRAW_reset,
        !           351:     TEXDRAW_text, null_scale, TEXDRAW_graphics, TEXDRAW_move, TEXDRAW_vector,
        !           352:     TEXDRAW_linetype, TEXDRAW_put_text, TEXDRAW_text_angle,
        !           353:     TEXDRAW_justify_text, TEXDRAW_point, TEXDRAW_arrow, set_font_null
        !           354: TERM_TABLE_END(texdraw_driver)
        !           355:
        !           356: #undef LAST_TERM
        !           357: #define LAST_TERM texdraw_driver
        !           358:
        !           359: #endif /* TERM_TABLE */
        !           360:
        !           361: #endif /* TERM_PROTO_ONLY */
        !           362:
        !           363: #ifdef TERM_HELP
        !           364: START_HELP(texdraw)
        !           365: "1 texdraw",
        !           366: "?commands set terminal texdraw",
        !           367: "?set terminal texdraw",
        !           368: "?set term texdraw",
        !           369: "?terminal texdraw",
        !           370: "?term texdraw",
        !           371: "?texdraw",
        !           372: " The `texdraw` terminal driver supports the LaTeX texdraw environment.  It is",
        !           373: " intended for use with \"texdraw.sty\" and \"texdraw.tex\" in the texdraw package.",
        !           374: "",
        !           375: " It has no options."
        !           376: END_HELP(texdraw)
        !           377: #endif /* TERM_HELP */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>