1 /* This file is part of the GNU plotutils package.  Copyright (C) 1995,
2    1996, 1997, 1998, 1999, 2000, 2005, 2008, Free Software Foundation, Inc.
3 
4    The GNU plotutils package is free software.  You may redistribute it
5    and/or modify it under the terms of the GNU General Public License as
6    published by the Free Software foundation; either version 2, or (at your
7    option) any later version.
8 
9    The GNU plotutils package is distributed in the hope that it will be
10    useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    General Public License for more details.
13 
14    You should have received a copy of the GNU General Public License along
15    with the GNU plotutils package; see the file COPYING.  If not, write to
16    the Free Software Foundation, Inc., 51 Franklin St., Fifth Floor,
17    Boston, MA 02110-1301, USA. */
18 
19 /* This is "plot.h", the public header file for GNU libplot, a shared
20    library for 2-dimensional vector graphics.  It declares both the new C
21    binding, which is thread-safe, and the old C binding, which is not. */
22 
23 /* stdio.h must be included before this file is included. */
24 
25 #ifndef _PLOT_H_
26 #define _PLOT_H_ 1
27 
28 /***********************************************************************/
29 
30 /* Version of GNU libplot/libplotter which this header file accompanies.
31    This information is included beginning with version 4.0.
32 
33    The PL_LIBPLOT_VER_STRING macro is compiled into the library, as
34    `pl_libplot_ver'.  The PL_LIBPLOT_VER macro is not compiled into it.
35    Both are available to applications that include this header file. */
36 
37 #define PL_LIBPLOT_VER_STRING "4.4"
38 #define PL_LIBPLOT_VER         404
39 
40 extern const char pl_libplot_ver[8];   /* need room for 99.99aa */
41 
42 /***********************************************************************/
43 
44 /* The functions in the C binding deal with `plPlotter' and
45    `plPlotterParams' objects.  They are the same as the `Plotter' and
46    `PlotterParams' objects of the C++ binding.  Internally, they are called
47    `plPlotterStruct' and `plPlotterParamsStruct'.  In the context of this
48    header file, they are opaque. */
49 typedef struct plPlotterStruct plPlotter;
50 typedef struct plPlotterParamsStruct plPlotterParams;
51 
52 /* Support C++.  This file could be #included by a C++ compiler rather than
53    a C compiler, in which case it needs to know that libplot functions have
54    C linkage, not C++ linkage.   This is accomplished by wrapping all
55    function declarations in __BEGIN_DECLS ... __END_DECLS. */
56 #ifdef ___BEGIN_DECLS
57 #undef ___BEGIN_DECLS
58 #endif
59 #ifdef ___END_DECLS
60 #undef ___END_DECLS
61 #endif
62 #ifdef __cplusplus
63 # define ___BEGIN_DECLS extern "C" {
64 # define ___END_DECLS }
65 #else
66 # define ___BEGIN_DECLS		/* empty */
67 # define ___END_DECLS		/* empty */
68 #endif
69 
70 ___BEGIN_DECLS
71 
72 /* THE C API */
73 
74 /* Constructor/destructor for the plPlotter type.  Parameter values are
75    specified at creation time via a plPlotterParams instance.  There is no
76    copy constructor. */
77 plPlotter * pl_newpl_r (const char *type, FILE *infile, FILE *outfile, FILE *errfile, const plPlotterParams *plotter_params);
78 int pl_deletepl_r (plPlotter *plotter);
79 
80 /* Constructor/destructor/copy constructor for the plPlotterParams type,
81    any instance of which stores parameters that are used when creating a
82    plPlotter. */
83 plPlotterParams * pl_newplparams (void);
84 int pl_deleteplparams (plPlotterParams *plotter_params);
85 plPlotterParams * pl_copyplparams (const plPlotterParams *plotter_params);
86 
87 /* A function for setting a single Plotter parameter in a plPlotterParams
88    instance.  */
89 int pl_setplparam (plPlotterParams *plotter_params, const char *parameter, void *value);
90 
91 /* THE PLOTTER METHODS */
92 
93 /* 13 functions in traditional (pre-GNU) libplot */
94 int pl_arc_r (plPlotter *plotter, int xc, int yc, int x0, int y0, int x1, int y1);
95 int pl_box_r (plPlotter *plotter, int x0, int y0, int x1, int y1);
96 int pl_circle_r (plPlotter *plotter, int x, int y, int r);
97 int pl_closepl_r (plPlotter *plotter);
98 int pl_cont_r (plPlotter *plotter, int x, int y);
99 int pl_erase_r (plPlotter *plotter);
100 int pl_label_r (plPlotter *plotter, const char *s);
101 int pl_line_r (plPlotter *plotter, int x0, int y0, int x1, int y1);
102 int pl_linemod_r (plPlotter *plotter, const char *s);
103 int pl_move_r (plPlotter *plotter, int x, int y);
104 int pl_openpl_r (plPlotter *plotter);
105 int pl_point_r (plPlotter *plotter, int x, int y);
106 int pl_space_r (plPlotter *plotter, int x0, int y0, int x1, int y1);
107 
108 /* 46 additional functions in GNU libplot, plus 1 obsolete function
109    [pl_outfile_r]. */
110 FILE* pl_outfile_r (plPlotter *plotter, FILE* outfile);/* OBSOLETE */
111 int pl_alabel_r (plPlotter *plotter, int x_justify, int y_justify, const char *s);
112 int pl_arcrel_r (plPlotter *plotter, int dxc, int dyc, int dx0, int dy0, int dx1, int dy1);
113 int pl_bezier2_r (plPlotter *plotter, int x0, int y0, int x1, int y1, int x2, int y2);
114 int pl_bezier2rel_r (plPlotter *plotter, int dx0, int dy0, int dx1, int dy1, int dx2, int dy2);
115 int pl_bezier3_r (plPlotter *plotter, int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
116 int pl_bezier3rel_r (plPlotter *plotter, int dx0, int dy0, int dx1, int dy1, int dx2, int dy2, int dx3, int dy3);
117 int pl_bgcolor_r (plPlotter *plotter, int red, int green, int blue);
118 int pl_bgcolorname_r (plPlotter *plotter, const char *name);
119 int pl_boxrel_r (plPlotter *plotter, int dx0, int dy0, int dx1, int dy1);
120 int pl_capmod_r (plPlotter *plotter, const char *s);
121 int pl_circlerel_r (plPlotter *plotter, int dx, int dy, int r);
122 int pl_closepath_r (plPlotter *plotter);
123 int pl_color_r (plPlotter *plotter, int red, int green, int blue);
124 int pl_colorname_r (plPlotter *plotter, const char *name);
125 int pl_contrel_r (plPlotter *plotter, int x, int y);
126 int pl_ellarc_r (plPlotter *plotter, int xc, int yc, int x0, int y0, int x1, int y1);
127 int pl_ellarcrel_r (plPlotter *plotter, int dxc, int dyc, int dx0, int dy0, int dx1, int dy1);
128 int pl_ellipse_r (plPlotter *plotter, int x, int y, int rx, int ry, int angle);
129 int pl_ellipserel_r (plPlotter *plotter, int dx, int dy, int rx, int ry, int angle);
130 int pl_endpath_r (plPlotter *plotter);
131 int pl_endsubpath_r (plPlotter *plotter);
132 int pl_fillcolor_r (plPlotter *plotter, int red, int green, int blue);
133 int pl_fillcolorname_r (plPlotter *plotter, const char *name);
134 int pl_fillmod_r (plPlotter *plotter, const char *s);
135 int pl_filltype_r (plPlotter *plotter, int level);
136 int pl_flushpl_r (plPlotter *plotter);
137 int pl_fontname_r (plPlotter *plotter, const char *s);
138 int pl_fontsize_r (plPlotter *plotter, int size);
139 int pl_havecap_r (plPlotter *plotter, const char *s);
140 int pl_joinmod_r (plPlotter *plotter, const char *s);
141 int pl_labelwidth_r (plPlotter *plotter, const char *s);
142 int pl_linedash_r (plPlotter *plotter, int n, const int *dashes, int offset);
143 int pl_linerel_r (plPlotter *plotter, int dx0, int dy0, int dx1, int dy1);
144 int pl_linewidth_r (plPlotter *plotter, int size);
145 int pl_marker_r (plPlotter *plotter, int x, int y, int type, int size);
146 int pl_markerrel_r (plPlotter *plotter, int dx, int dy, int type, int size);
147 int pl_moverel_r (plPlotter *plotter, int x, int y);
148 int pl_orientation_r (plPlotter *plotter, int direction);
149 int pl_pencolor_r (plPlotter *plotter, int red, int green, int blue);
150 int pl_pencolorname_r (plPlotter *plotter, const char *name);
151 int pl_pentype_r (plPlotter *plotter, int level);
152 int pl_pointrel_r (plPlotter *plotter, int dx, int dy);
153 int pl_restorestate_r (plPlotter *plotter);
154 int pl_savestate_r (plPlotter *plotter);
155 int pl_space2_r (plPlotter *plotter, int x0, int y0, int x1, int y1, int x2, int y2);
156 int pl_textangle_r (plPlotter *plotter, int angle);
157 
158 /* 32 floating point counterparts to some of the above (all GNU additions) */
159 double pl_ffontname_r (plPlotter *plotter, const char *s);
160 double pl_ffontsize_r (plPlotter *plotter, double size);
161 double pl_flabelwidth_r (plPlotter *plotter, const char *s);
162 double pl_ftextangle_r (plPlotter *plotter, double angle);
163 int pl_farc_r (plPlotter *plotter, double xc, double yc, double x0, double y0, double x1, double y1);
164 int pl_farcrel_r (plPlotter *plotter, double dxc, double dyc, double dx0, double dy0, double dx1, double dy1);
165 int pl_fbezier2_r (plPlotter *plotter, double x0, double y0, double x1, double y1, double x2, double y2);
166 int pl_fbezier2rel_r (plPlotter *plotter, double dx0, double dy0, double dx1, double dy1, double dx2, double dy2);
167 int pl_fbezier3_r (plPlotter *plotter, double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3);
168 int pl_fbezier3rel_r (plPlotter *plotter, double dx0, double dy0, double dx1, double dy1, double dx2, double dy2, double dx3, double dy3);
169 int pl_fbox_r (plPlotter *plotter, double x0, double y0, double x1, double y1);
170 int pl_fboxrel_r (plPlotter *plotter, double dx0, double dy0, double dx1, double dy1);
171 int pl_fcircle_r (plPlotter *plotter, double x, double y, double r);
172 int pl_fcirclerel_r (plPlotter *plotter, double dx, double dy, double r);
173 int pl_fcont_r (plPlotter *plotter, double x, double y);
174 int pl_fcontrel_r (plPlotter *plotter, double dx, double dy);
175 int pl_fellarc_r (plPlotter *plotter, double xc, double yc, double x0, double y0, double x1, double y1);
176 int pl_fellarcrel_r (plPlotter *plotter, double dxc, double dyc, double dx0, double dy0, double dx1, double dy1);
177 int pl_fellipse_r (plPlotter *plotter, double x, double y, double rx, double ry, double angle);
178 int pl_fellipserel_r (plPlotter *plotter, double dx, double dy, double rx, double ry, double angle);
179 int pl_flinedash_r (plPlotter *plotter, int n, const double *dashes, double offset);
180 int pl_fline_r (plPlotter *plotter, double x0, double y0, double x1, double y1);
181 int pl_flinerel_r (plPlotter *plotter, double dx0, double dy0, double dx1, double dy1);
182 int pl_flinewidth_r (plPlotter *plotter, double size);
183 int pl_fmarker_r (plPlotter *plotter, double x, double y, int type, double size);
184 int pl_fmarkerrel_r (plPlotter *plotter, double dx, double dy, int type, double size);
185 int pl_fmove_r (plPlotter *plotter, double x, double y);
186 int pl_fmoverel_r (plPlotter *plotter, double dx, double dy);
187 int pl_fpoint_r (plPlotter *plotter, double x, double y);
188 int pl_fpointrel_r (plPlotter *plotter, double dx, double dy);
189 int pl_fspace_r (plPlotter *plotter, double x0, double y0, double x1, double y1);
190 int pl_fspace2_r (plPlotter *plotter, double x0, double y0, double x1, double y1, double x2, double y2);
191 
192 /* 6 floating point operations with no integer counterpart (GNU additions) */
193 int pl_fconcat_r (plPlotter *plotter, double m0, double m1, double m2, double m3, double m4, double m5);
194 int pl_fmiterlimit_r (plPlotter *plotter, double limit);
195 int pl_frotate_r (plPlotter *plotter, double theta);
196 int pl_fscale_r (plPlotter *plotter, double x, double y);
197 int pl_fsetmatrix_r (plPlotter *plotter, double m0, double m1, double m2, double m3, double m4, double m5);
198 int pl_ftranslate_r (plPlotter *plotter, double x, double y);
199 
200 /* THE OLD (non-thread-safe) C API */
201 
202 /* 3 functions specific to the old C API.  (For construction/destruction
203    and selection of Plotters, and setting of Plotter parameters.  The fact
204    that a single Plotter is globally `selected' makes the old API
205    non-thread-safe.) */
206 int pl_newpl (const char *type, FILE *infile, FILE *outfile, FILE *errfile);
207 int pl_selectpl (int handle);
208 int pl_deletepl (int handle);
209 
210 /* A function for setting parameters of Plotters that will subsequently be
211    created.  This also makes the old API non-thread-safe. */
212 int pl_parampl (const char *parameter, void *value);
213 
214 /* THE PLOTTER METHODS */
215 /* In the old API, the Plotter to be acted on is specified by first calling
216    selectpl(). */
217 
218 /* 13 functions in traditional (pre-GNU) libplot */
219 int pl_arc (int xc, int yc, int x0, int y0, int x1, int y1);
220 int pl_box (int x0, int y0, int x1, int y1);
221 int pl_circle (int x, int y, int r);
222 int pl_closepl (void);
223 int pl_cont (int x, int y);
224 int pl_erase (void);
225 int pl_label (const char *s);
226 int pl_line (int x0, int y0, int x1, int y1);
227 int pl_linemod (const char *s);
228 int pl_move (int x, int y);
229 int pl_openpl (void);
230 int pl_point (int x, int y);
231 int pl_space (int x0, int y0, int x1, int y1);
232 
233 /* 46 additional functions in GNU libplot, plus 1 obsolete function
234    [pl_outfile]. */
235 FILE* pl_outfile (FILE* outfile);/* OBSOLETE */
236 int pl_alabel (int x_justify, int y_justify, const char *s);
237 int pl_arcrel (int dxc, int dyc, int dx0, int dy0, int dx1, int dy1);
238 int pl_bezier2 (int x0, int y0, int x1, int y1, int x2, int y2);
239 int pl_bezier2rel (int dx0, int dy0, int dx1, int dy1, int dx2, int dy2);
240 int pl_bezier3 (int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
241 int pl_bezier3rel (int dx0, int dy0, int dx1, int dy1, int dx2, int dy2, int dx3, int dy3);
242 int pl_bgcolor (int red, int green, int blue);
243 int pl_bgcolorname (const char *name);
244 int pl_boxrel (int dx0, int dy0, int dx1, int dy1);
245 int pl_capmod (const char *s);
246 int pl_circlerel (int dx, int dy, int r);
247 int pl_closepath (void);
248 int pl_color (int red, int green, int blue);
249 int pl_colorname (const char *name);
250 int pl_contrel (int x, int y);
251 int pl_ellarc (int xc, int yc, int x0, int y0, int x1, int y1);
252 int pl_ellarcrel (int dxc, int dyc, int dx0, int dy0, int dx1, int dy1);
253 int pl_ellipse (int x, int y, int rx, int ry, int angle);
254 int pl_ellipserel (int dx, int dy, int rx, int ry, int angle);
255 int pl_endpath (void);
256 int pl_endsubpath (void);
257 int pl_fillcolor (int red, int green, int blue);
258 int pl_fillcolorname (const char *name);
259 int pl_fillmod (const char *s);
260 int pl_filltype (int level);
261 int pl_flushpl (void);
262 int pl_fontname (const char *s);
263 int pl_fontsize (int size);
264 int pl_havecap (const char *s);
265 int pl_joinmod (const char *s);
266 int pl_labelwidth (const char *s);
267 int pl_linedash (int n, const int *dashes, int offset);
268 int pl_linerel (int dx0, int dy0, int dx1, int dy1);
269 int pl_linewidth (int size);
270 int pl_marker (int x, int y, int type, int size);
271 int pl_markerrel (int dx, int dy, int type, int size);
272 int pl_moverel (int x, int y);
273 int pl_orientation (int direction);
274 int pl_pencolor (int red, int green, int blue);
275 int pl_pencolorname (const char *name);
276 int pl_pentype (int level);
277 int pl_pointrel (int dx, int dy);
278 int pl_restorestate (void);
279 int pl_savestate (void);
280 int pl_space2 (int x0, int y0, int x1, int y1, int x2, int y2);
281 int pl_textangle (int angle);
282 
283 /* 32 floating point counterparts to some of the above (all GNU additions) */
284 double pl_ffontname (const char *s);
285 double pl_ffontsize (double size);
286 double pl_flabelwidth (const char *s);
287 double pl_ftextangle (double angle);
288 int pl_farc (double xc, double yc, double x0, double y0, double x1, double y1);
289 int pl_farcrel (double dxc, double dyc, double dx0, double dy0, double dx1, double dy1);
290 int pl_fbezier2 (double x0, double y0, double x1, double y1, double x2, double y2);
291 int pl_fbezier2rel (double dx0, double dy0, double dx1, double dy1, double dx2, double dy2);
292 int pl_fbezier3 (double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3);
293 int pl_fbezier3rel (double dx0, double dy0, double dx1, double dy1, double dx2, double dy2, double dx3, double dy3);
294 int pl_fbox (double x0, double y0, double x1, double y1);
295 int pl_fboxrel (double dx0, double dy0, double dx1, double dy1);
296 int pl_fcircle (double x, double y, double r);
297 int pl_fcirclerel (double dx, double dy, double r);
298 int pl_fcont (double x, double y);
299 int pl_fcontrel (double dx, double dy);
300 int pl_fellarc (double xc, double yc, double x0, double y0, double x1, double y1);
301 int pl_fellarcrel (double dxc, double dyc, double dx0, double dy0, double dx1, double dy1);
302 int pl_fellipse (double x, double y, double rx, double ry, double angle);
303 int pl_fellipserel (double dx, double dy, double rx, double ry, double angle);
304 int pl_flinedash (int n, const double *dashes, double offset);
305 int pl_fline (double x0, double y0, double x1, double y1);
306 int pl_flinerel (double dx0, double dy0, double dx1, double dy1);
307 int pl_flinewidth (double size);
308 int pl_fmarker (double x, double y, int type, double size);
309 int pl_fmarkerrel (double dx, double dy, int type, double size);
310 int pl_fmove (double x, double y);
311 int pl_fmoverel (double dx, double dy);
312 int pl_fpoint (double x, double y);
313 int pl_fpointrel (double dx, double dy);
314 int pl_fspace (double x0, double y0, double x1, double y1);
315 int pl_fspace2 (double x0, double y0, double x1, double y1, double x2, double y2);
316 
317 /* 6 floating point operations with no integer counterpart (GNU additions) */
318 int pl_fconcat (double m0, double m1, double m2, double m3, double m4, double m5);
319 int pl_fmiterlimit (double limit);
320 int pl_frotate (double theta);
321 int pl_fscale (double x, double y);
322 int pl_fsetmatrix (double m0, double m1, double m2, double m3, double m4, double m5);
323 int pl_ftranslate (double x, double y);
324 
325 
326 /* UNDOCUMENTED FONT API CALLS */
327 /* These are used by the graphics programs in the plotutils package (e.g.,
328    `graph') to access the font tables within libplot, so that the user can
329    be given lists of font names. */
330 
331 void *_pl_get_hershey_font_info (plPlotter *plotter);
332 void *_pl_get_ps_font_info (plPlotter *plotter);
333 void *_pl_get_pcl_font_info (plPlotter *plotter);
334 void *_pl_get_stick_font_info (plPlotter *plotter);
335 
336 ___END_DECLS
337 
338 /* THE GLOBAL VARIABLES IN GNU LIBPLOT */
339 /* There are two: user-settable error handlers (not yet documented). */
340 extern int (*pl_libplot_warning_handler) (const char *msg);
341 extern int (*pl_libplot_error_handler) (const char *msg);
342 
343 #undef const
344 
345 
346 /***********************************************************************/
347 
348 /* Useful definitions, included in both plot.h and plotter.h. */
349 
350 #ifndef _PL_LIBPLOT_USEFUL_DEFS
351 #define _PL_LIBPLOT_USEFUL_DEFS 1
352 
353 /* Symbol types for the marker() function, extending over the range 0..31.
354    (1 through 5 are the same as in the GKS [Graphical Kernel System].)
355 
356    These are now defined as enums rather than ints.  Cast them to ints if
357    necessary. */
358 enum
359 { M_NONE, M_DOT, M_PLUS, M_ASTERISK, M_CIRCLE, M_CROSS,
360   M_SQUARE, M_TRIANGLE, M_DIAMOND, M_STAR, M_INVERTED_TRIANGLE,
361   M_STARBURST, M_FANCY_PLUS, M_FANCY_CROSS, M_FANCY_SQUARE,
362   M_FANCY_DIAMOND, M_FILLED_CIRCLE, M_FILLED_SQUARE, M_FILLED_TRIANGLE,
363   M_FILLED_DIAMOND, M_FILLED_INVERTED_TRIANGLE, M_FILLED_FANCY_SQUARE,
364   M_FILLED_FANCY_DIAMOND, M_HALF_FILLED_CIRCLE, M_HALF_FILLED_SQUARE,
365   M_HALF_FILLED_TRIANGLE, M_HALF_FILLED_DIAMOND,
366   M_HALF_FILLED_INVERTED_TRIANGLE, M_HALF_FILLED_FANCY_SQUARE,
367   M_HALF_FILLED_FANCY_DIAMOND, M_OCTAGON, M_FILLED_OCTAGON
368 };
369 
370 /* ONE-BYTE OPERATION CODES FOR GNU METAFILE FORMAT. These are now defined
371    as enums rather than ints.  Cast them to ints if necessary.
372 
373    There are 85 currently recognized op codes.  The first 10 date back to
374    Unix plot(5) format. */
375 
376 enum
377 {
378 /* 10 op codes for primitive graphics operations, as in Unix plot(5) format. */
379   O_ARC		=	'a',
380   O_CIRCLE	=	'c',
381   O_CONT	=	'n',
382   O_ERASE	=	'e',
383   O_LABEL	=	't',
384   O_LINEMOD	=	'f',
385   O_LINE	=	'l',
386   O_MOVE	=	'm',
387   O_POINT	=	'p',
388   O_SPACE	=	's',
389 
390 /* 42 op codes that are GNU extensions */
391   O_ALABEL	=	'T',
392   O_ARCREL	=	'A',
393   O_BEZIER2	=       'q',
394   O_BEZIER2REL	=       'r',
395   O_BEZIER3	=       'y',
396   O_BEZIER3REL	=       'z',
397   O_BGCOLOR	=	'~',
398   O_BOX		=	'B',	/* not an op code in Unix plot(5) */
399   O_BOXREL	=	'H',
400   O_CAPMOD	=	'K',
401   O_CIRCLEREL	=	'G',
402   O_CLOSEPATH	=	'k',
403   O_CLOSEPL	=	'x',	/* not an op code in Unix plot(5) */
404   O_COMMENT	=	'#',
405   O_CONTREL	=	'N',
406   O_ELLARC	=	'?',
407   O_ELLARCREL	=	'/',
408   O_ELLIPSE	=	'+',
409   O_ELLIPSEREL	=	'=',
410   O_ENDPATH	=	'E',
411   O_ENDSUBPATH	=	']',
412   O_FILLTYPE	=	'L',
413   O_FILLCOLOR	=	'D',
414   O_FILLMOD	=	'g',
415   O_FONTNAME	=	'F',
416   O_FONTSIZE	=	'S',
417   O_JOINMOD	=	'J',
418   O_LINEDASH	= 	'd',
419   O_LINEREL	=	'I',
420   O_LINEWIDTH	=	'W',
421   O_MARKER	=	'Y',
422   O_MARKERREL	=	'Z',
423   O_MOVEREL	=	'M',
424   O_OPENPL	=	'o',	/* not an op code in Unix plot(5) */
425   O_ORIENTATION	=	'b',
426   O_PENCOLOR	=	'-',
427   O_PENTYPE	=	'h',
428   O_POINTREL	=	'P',
429   O_RESTORESTATE=	'O',
430   O_SAVESTATE	=	'U',
431   O_SPACE2	=	':',
432   O_TEXTANGLE	=	'R',
433 
434 /* 30 floating point counterparts to many of the above.  They are not even
435    slightly mnemonic. */
436   O_FARC	=	'1',
437   O_FARCREL	=	'2',
438   O_FBEZIER2	=       '`',
439   O_FBEZIER2REL	=       '\'',
440   O_FBEZIER3	=       ',',
441   O_FBEZIER3REL	=       '.',
442   O_FBOX	=	'3',
443   O_FBOXREL	=	'4',
444   O_FCIRCLE	=	'5',
445   O_FCIRCLEREL	=	'6',
446   O_FCONT	=	')',
447   O_FCONTREL	=	'_',
448   O_FELLARC	=	'}',
449   O_FELLARCREL	=	'|',
450   O_FELLIPSE	=	'{',
451   O_FELLIPSEREL	=	'[',
452   O_FFONTSIZE	=	'7',
453   O_FLINE	=	'8',
454   O_FLINEDASH	= 	'w',
455   O_FLINEREL	=	'9',
456   O_FLINEWIDTH	=	'0',
457   O_FMARKER	=	'!',
458   O_FMARKERREL	=	'@',
459   O_FMOVE	=	'$',
460   O_FMOVEREL	=	'%',
461   O_FPOINT	=	'^',
462   O_FPOINTREL	=	'&',
463   O_FSPACE	=	'*',
464   O_FSPACE2	=	';',
465   O_FTEXTANGLE	=	'(',
466 
467 /* 3 op codes for floating point operations with no integer counterpart */
468   O_FCONCAT		=	'\\',
469   O_FMITERLIMIT		=	'i',
470   O_FSETMATRIX		=	'j'
471 };
472 
473 #endif /* not _PL_LIBPLOT_USEFUL_DEFS */
474 
475 /***********************************************************************/
476 
477 #endif /* not _PLOT_H_ */
478