1/* Hello, Emacs, this is -*-C-*-
2 * $Id: dxy.trm,v 1.14 2006/07/21 02:35:45 sfeam Exp $
3 *
4 */
5
6/* GNUPLOT - dxy.trm */
7
8/*[
9 * Copyright 1990 - 1993, 1998, 2004
10 *
11 * Permission to use, copy, and distribute this software and its
12 * documentation for any purpose with or without fee is hereby granted,
13 * provided that the above copyright notice appear in all copies and
14 * that both that copyright notice and this permission notice appear
15 * in supporting documentation.
16 *
17 * Permission to modify the software is granted, but not the right to
18 * distribute the complete modified source code.  Modifications are to
19 * be distributed as patches to the released version.  Permission to
20 * distribute binaries produced by compiling modified sources is granted,
21 * provided you
22 *   1. distribute the corresponding source modifications from the
23 *    released version in the form of a patch file along with the binaries,
24 *   2. add special version identification to distinguish your version
25 *    in addition to the base release version number,
26 *   3. provide your name and address as the primary contact for the
27 *    support of your modified version, and
28 *   4. retain our contact information in regard to use of the base
29 *    software.
30 * Permission to distribute the released version of the source code along
31 * with corresponding source modifications in the form of a patch file is
32 * granted with same provisions 2 through 4 for binary distributions.
33 *
34 * This software is provided "as is" without express or implied warranty
35 * to the extent permitted by applicable law.
36]*/
37
38/*
39 * This file is included by ../term.c.
40 *
41 * This terminal driver supports:
42 *  Roland DXY800A plotter
43 *
44 * AUTHORS
45 *  Martin Yii, eln557h@monu3.OZ
46 *  Further modified Jan 1990 by Russell Lang, rjl@monu1.cc.monash.oz
47 *
48 * send your comments or suggestions to (gnuplot-info@lists.sourceforge.net).
49 *
50 */
51
52/*
53 * adapted to the new terminal layout by Stefan Bodewig (Dec. 1995)
54 */
55
56#include "driver.h"
57
58#ifdef TERM_REGISTER
59register_term(dxy800a)
60#endif
61
62#ifdef TERM_PROTO
63TERM_PUBLIC void DXY_init __PROTO((void));
64TERM_PUBLIC void DXY_graphics __PROTO((void));
65TERM_PUBLIC void DXY_text __PROTO((void));
66TERM_PUBLIC void DXY_linetype __PROTO((int linetype));
67TERM_PUBLIC void DXY_move __PROTO((unsigned int x, unsigned int y));
68TERM_PUBLIC void DXY_vector __PROTO((unsigned int x, unsigned int y));
69TERM_PUBLIC void DXY_put_text __PROTO((unsigned int x, unsigned int y, const char *str));
70TERM_PUBLIC int DXY_text_angle __PROTO((int ang));
71TERM_PUBLIC void DXY_reset __PROTO((void));
72
73#define DXY_XMAX 2470
74#define DXY_YMAX 1700
75
76#define DXY_XLAST (DXY_XMAX - 1)
77#define DXY_YLAST (DXY_XMAX - 1)
78
79#define DXY_VCHAR	(56)	/* double actual height of characters */
80#define DXY_HCHAR	(28)	/* actual width including spacing */
81#define DXY_VTIC	(28)
82#define DXY_HTIC	(28)
83#endif /* TERM_PROTO */
84
85#ifndef TERM_PROTO_ONLY
86#ifdef TERM_BODY
87
88int dxy_angle = 0;
89
90TERM_PUBLIC void
91DXY_init()
92{
93    /* No initialisation sequences for DXY 800A */
94}
95
96
97TERM_PUBLIC void
98DXY_graphics()
99{
100    /* HOME, Character size 3 */
101    fputs("H\nS3\n", gpoutfile);
102}
103
104
105TERM_PUBLIC void
106DXY_text()
107{
108    /* No sequences needed */
109}
110
111
112TERM_PUBLIC void
113DXY_linetype(int linetype)
114{
115    /* select pen */
116    fprintf(gpoutfile, "J%d\n", (linetype + 2) % 8 + 1);
117    switch (linetype) {
118    case LT_AXIS:
119	/* use dotted line for axis */
120	fputs("L1\nB50\n", gpoutfile);
121	break;
122    default:
123	/* use solid line for all others */
124	fputs("L0\n", gpoutfile);
125	break;
126    }
127}
128
129
130TERM_PUBLIC void
131DXY_move(unsigned int x, unsigned int y)
132{
133    fprintf(gpoutfile, "M%d,%d\n", x, y);
134}
135
136
137TERM_PUBLIC void
138DXY_vector(unsigned int x, unsigned int y)
139{
140    fprintf(gpoutfile, "D%d,%d\n", x, y);
141}
142
143
144TERM_PUBLIC void
145DXY_put_text(unsigned int x, unsigned int y, const char *str)
146{
147    if (dxy_angle == 1) {
148	/* vertical */
149	DXY_move(x + DXY_VCHAR / 4, y);
150    } else {
151	/* horiz */
152	DXY_move(x, y - DXY_VCHAR / 4);
153    }
154    fprintf(gpoutfile, "P%s\n", str);
155}
156
157
158TERM_PUBLIC int
159DXY_text_angle(int ang)
160{
161    dxy_angle = (ang ? 1 : 0);
162    fprintf(gpoutfile, "Q%d\n", ang);
163    return TRUE;
164}
165
166
167TERM_PUBLIC void
168DXY_reset()
169{
170    /* Home pen */
171    fputs("H\n", gpoutfile);
172}
173
174#endif /* TERM_BODY */
175
176#ifdef TERM_TABLE
177TERM_TABLE_START(dxy_driver)
178    "dxy800a", "Roland DXY800A plotter",
179    DXY_XMAX, DXY_YMAX, DXY_VCHAR, DXY_HCHAR,
180    DXY_VTIC, DXY_HTIC, options_null, DXY_init, DXY_reset,
181    DXY_text, null_scale, DXY_graphics, DXY_move, DXY_vector,
182    DXY_linetype, DXY_put_text, DXY_text_angle,
183    null_justify_text, do_point, do_arrow, set_font_null
184TERM_TABLE_END(dxy_driver)
185
186#undef LAST_TERM
187#define LAST_TERM dxy_driver
188
189#endif /* TERM_TABLE */
190#endif /* TERM_PROTO_ONLY */
191
192#ifdef TERM_HELP
193START_HELP(dxy800a)
194"1 dxy800a",
195"?commands set terminal dxy800a",
196"?set terminal dxy800a",
197"?set term dxy800a",
198"?terminal dxy800a",
199"?term dxy800a",
200"?dxy800a",
201" Note: legacy terminal. ",
202" This terminal driver supports the Roland DXY800A plotter.  It has no options."
203END_HELP(dxy800a)
204#endif
205