/* * Id : texdraw.trm3.38.2.51992/11/1002 : 08 : 00wooExp */

/* GNUPLOT - texdraw.trm */ /* * Copyright (C) 1990 * * 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 modified code. Modifications are to be distributed * as patches to released version. * * This software is provided "as is" without express or implied warranty. * * This file is included by ../term.c. * * This terminal driver supports: * The TEXDRAW macros for LaTeX. * * AUTHORS * Khun Yee Fung. Modified from eepic.trm. * clipper@csd.uwo.ca * January 20, 1992 * * send your comments or suggestions to (pixar!info-gnuplot@sun.com). * */

/* * This file contains the texdraw terminal driver, intended for use with the * texdraw.sty macro package for LaTeX. This is an alternative to the * latex driver. You need texdraw.sty, and texdraw.tex. * Be sure to use the texdraw package with the &sstarf#star;path commands. * Ask <clipper@csd.uwo.ca> for the modified version if you don't have it. * */

#define TEXDRAW_PTS_PER_INCH (72.27) #define DOTS_PER_INCH (300) /* resolution of printer we expect to use */ #define TEXDRAW_UNIT (TEXDRAW_PTS_PER_INCH/DOTS_PER_INCH) /* dot size in pt */

/* 5 inches wide by 3 inches high (default) */ #define TEXDRAW_XMAX (5*DOTS_PER_INCH) #define TEXDRAW_YMAX (3*DOTS_PER_INCH)

#define TEXDRAW_HTIC (5*DOTS_PER_INCH/72) /* (5./TEXDRAW_UNIT) */ #define TEXDRAW_VTIC (5*DOTS_PER_INCH/72) /* (5./TEXDRAW_UNIT) */ #define TEXDRAW_HCHAR (DOTS_PER_INCH*53/10/72) /* (5.3/TEXDRAW_UNIT) */ #define TEXDRAW_VCHAR (DOTS_PER_INCH*11/72) /* (11./TEXDRAW_UNIT) */

static unsigned int TEXDRAW_posx; static unsigned int TEXDRAW_posy; enum JUSTIFY TEXDRAW_justify = LEFT; enum JUSTIFY TEXDRAW_last_justify = LEFT; static int TEXDRAW_angle = 0; static float TEXDRAW_scalefactor = 0.2409; static double TEXDRAW_xscale = 1.0, TEXDRAW_yscale = 1.0;

/* for DOTS point style */ #define TEXDRAW_TINY_DOT "
htext
cdot"

/* POINTS */ #define TEXDRAW_POINT_TYPES 12 /* we supply more point types */ static char *TEXDRAW_points[] = "
rmove(0 4)
htext
Diamond", "
htext+", "
rmove(0 4)
htext
Box", "
htext
times", "
htext
triangle", "
htext
star", "
lcir f:9", "
lcir f:12", "
lcir f:16", "
fcir f:0.9 r:9", "
fcir f:0.9 r:12", "
fcir f:0.9 r:16" ;

/* LINES */ #define TEXDRAW_NUMLINES 5 /* number of linetypes below */ static int TEXDRAW_lines[] = 4, /* -2 border */ 3, /* -1 axes */ 3, /* 0 solid thin */ 4, /* 1 solid thick */ 6, /* 2 solid Thick */ ;

static int TEXDRAW_last_type = 0; /* The line type selected most recently */ static int TEXDRAW_type; /* current line type */ static TBOOLEAN TEXDRAW_inline = FALSE; /* are we in the middle of a line */ static void TEXDRAW_endline(); /* terminate any line in progress */ static int TEXDRAW_linecount = 0; /* number of points in line so far */ #define TEXDRAW_LINEMAX 5 /* max value for linecount */

TEXDRAW_init() TEXDRAW_posx = TEXDRAW_posy = 0; TEXDRAW_linetype(-1); fprintf(outfile, "

TEXDRAW_scale(xs, ys) double xs, ys; /* scaling factors */ register struct termentry *t = &term_tbl[term];

/* we change the table for use in graphics.c */ t->xmax = (unsigned int) (TEXDRAW_XMAX * xs); t->ymax = (unsigned int) (TEXDRAW_YMAX * ys);

TEXDRAW_xscale = xs; TEXDRAW_yscale = ys;

return (TRUE);

TEXDRAW_graphics() fprintf(outfile, "
begintexdraw"); fprintf(outfile, "
normalsize"); fprintf(outfile, "
drawdim pt"); fprintf(outfile, "
setunitscale fprintf(outfile, "
linewd fprintf(outfile, "
textref h:L v:C"); TEXDRAW_last_type = 0; TEXDRAW_type = 0;

TEXDRAW_text() TEXDRAW_endline(); fprintf(outfile, "
endtexdraw");

TEXDRAW_linetype(linetype) int linetype; TEXDRAW_endline();

if (linetype >= TEXDRAW_NUMLINES - 2) linetype

TEXDRAW_type = linetype;

TEXDRAW_move(x, y) unsigned int x, y; TEXDRAW_endline();

TEXDRAW_posx = x; TEXDRAW_posy = y;

TEXDRAW_point(x, y, number) unsigned int x, y; int number; TEXDRAW_move(x, y);

/* Print the character defined by 'number'; number < 0 means to use a dot, otherwise one of the defined points. */ fprintf(outfile, "
move ((int)((double) x * TEXDRAW_xscale), (int)((double) y * TEXDRAW_yscale)); if (TEXDRAW_last_justify != CENTRE) fprintf(outfile, "
textref h:C v:C "); TEXDRAW_last_justify = CENTRE; fprintf(outfile, "(number < 0 ? TEXDRAW_TINY_DOT : TEXDRAW_points[number

TEXDRAW_vector(ux, uy) unsigned int ux, uy; if (!TEXDRAW_inline) TEXDRAW_inline = TRUE;

/* Start a new line. This depends on line type */ if (TEXDRAW_type != TEXDRAW_last_type) if (TEXDRAW_lines[TEXDRAW_type+2] != TEXDRAW_lines[TEXDRAW_last_type+2]) fprintf(outfile, "
linewd TEXDRAW_last_type = TEXDRAW_type; fprintf(outfile, "
path ((int)((double) TEXDRAW_posx * TEXDRAW_xscale), (int)((double) TEXDRAW_posy * TEXDRAW_yscale)); TEXDRAW_linecount = 1; else /* Even though we are in middle of a path, * we may want to start a new path command. * If they are too long then latex will choke. */ if (TEXDRAW_linecount++ >= TEXDRAW_LINEMAX) fprintf(outfile, "
cpath "); TEXDRAW_linecount = 1; fprintf(outfile, "((int)((double) ux * TEXDRAW_xscale), (int)((double) uy * TEXDRAW_yscale)); TEXDRAW_posx = ux; TEXDRAW_posy = uy;

static void TEXDRAW_endline() if (TEXDRAW_inline) fprintf(outfile, ""); TEXDRAW_inline = FALSE;

TEXDRAW_arrow(sx, sy, ex, ey, head) int sx, sy, ex, ey; TBOOLEAN head; char text;

if (head) text = 'a'; else text = 'l'; fprintf(outfile, "
move ((int)((double) sx * TEXDRAW_xscale), (int)((double) sy * TEXDRAW_yscale), text, (int)((double) ex * TEXDRAW_xscale), (int)((double) ey * TEXDRAW_yscale)); TEXDRAW_posx = ex; TEXDRAW_posy = ey;

TEXDRAW_put_text(x, y, str) int x, y; /* reference point of string */ char str[]; /* the text */ char text;

TEXDRAW_endline();

fprintf(outfile, "
move ((int)((double) x * TEXDRAW_xscale), (int)((double) y * TEXDRAW_yscale));

if (!TEXDRAW_angle) text = 'h'; else text = 'v';

if (TEXDRAW_last_justify != TEXDRAW_justify) TEXDRAW_last_justify = TEXDRAW_justify; if (TEXDRAW_justify == LEFT) fprintf(outfile, "
textref h:L v:C "); else if (TEXDRAW_justify == CENTRE) fprintf(outfile, "
textref h:C v:C "); else if (TEXDRAW_justify == RIGHT) fprintf(outfile, "
textref h:R v:C "); fprintf(outfile, "

int TEXDRAW_justify_text(mode) enum JUSTIFY mode; TEXDRAW_justify = mode; return (TRUE);

int TEXDRAW_text_angle(angle) int angle; TEXDRAW_angle = angle; return (TRUE);

TEXDRAW_reset() TEXDRAW_endline(); TEXDRAW_posx = TEXDRAW_posy = 0;