1 /* This file is part of the GNU plotutils package. Copyright (C) 1995,
2 1996, 1997, 1998, 1999, 2000, 2005, 2009, Free Software Foundation, Inc.
4 This file has been modified for use with GNU PSPP.
6 The GNU plotutils package is free software. You may redistribute it
7 and/or modify it under the terms of the GNU General Public License as
8 published by the Free Software foundation; either version 2, or (at your
9 option) any later version.
11 The GNU plotutils package is distributed in the hope that it will be
12 useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 General Public License for more details.
16 You should have received a copy of the GNU General Public License along
17 with the GNU plotutils package; see the file COPYING. If not, write to
18 the Free Software Foundation, Inc., 51 Franklin St., Fifth Floor,
19 Boston, MA 02110-1301, USA. */
21 /* This is "plot.h", the public header file for GNU libplot, a shared
22 library for 2-dimensional vector graphics. It declares both the new C
23 binding, which is thread-safe, and the old C binding, which is not. */
25 /* stdio.h must be included before this file is included. */
30 /***********************************************************************/
32 /* The functions in the C binding deal with `plPlotter' and
33 `plPlotterParams' objects. They are the same as the `Plotter' and
34 `PlotterParams' objects of the C++ binding. Internally, they are called
35 `plPlotterStruct' and `plPlotterParamsStruct'. In the context of this
36 header file, they are opaque. */
37 typedef struct plPlotterStruct plPlotter;
38 typedef struct plPlotterParamsStruct plPlotterParams;
40 /* Support C++. This file could be #included by a C++ compiler rather than
41 a C compiler, in which case it needs to know that libplot functions have
42 C linkage, not C++ linkage. This is accomplished by wrapping all
43 function declarations in __BEGIN_DECLS ... __END_DECLS. */
51 # define ___BEGIN_DECLS extern "C" {
52 # define ___END_DECLS }
54 # define ___BEGIN_DECLS /* empty */
55 # define ___END_DECLS /* empty */
62 /* Constructor/destructor for the plPlotter type. Parameter values are
63 specified at creation time via a plPlotterParams instance. There is no
65 plPlotter * pl_newpl_r (const char *type, FILE *infile, FILE *outfile, FILE *errfile, const plPlotterParams *plotter_params);
66 int pl_deletepl_r (plPlotter *plotter);
68 /* Constructor/destructor/copy constructor for the plPlotterParams type,
69 any instance of which stores parameters that are used when creating a
71 plPlotterParams * pl_newplparams (void);
72 int pl_deleteplparams (plPlotterParams *plotter_params);
73 plPlotterParams * pl_copyplparams (const plPlotterParams *plotter_params);
75 /* A function for setting a single Plotter parameter in a plPlotterParams
77 int pl_setplparam (plPlotterParams *plotter_params, const char *parameter, void *value);
79 /* THE PLOTTER METHODS */
81 /* 13 functions in traditional (pre-GNU) libplot */
82 int pl_arc_r (plPlotter *plotter, int xc, int yc, int x0, int y0, int x1, int y1);
83 int pl_box_r (plPlotter *plotter, int x0, int y0, int x1, int y1);
84 int pl_circle_r (plPlotter *plotter, int x, int y, int r);
85 int pl_closepl_r (plPlotter *plotter);
86 int pl_cont_r (plPlotter *plotter, int x, int y);
87 int pl_erase_r (plPlotter *plotter);
88 int pl_label_r (plPlotter *plotter, const char *s);
89 int pl_line_r (plPlotter *plotter, int x0, int y0, int x1, int y1);
90 int pl_linemod_r (plPlotter *plotter, const char *s);
91 int pl_move_r (plPlotter *plotter, int x, int y);
92 int pl_openpl_r (plPlotter *plotter);
93 int pl_point_r (plPlotter *plotter, int x, int y);
94 int pl_space_r (plPlotter *plotter, int x0, int y0, int x1, int y1);
96 /* 46 additional functions in GNU libplot, plus 1 obsolete function
98 FILE* pl_outfile_r (plPlotter *plotter, FILE* outfile);/* OBSOLETE */
99 int pl_alabel_r (plPlotter *plotter, int x_justify, int y_justify, const char *s);
100 int pl_arcrel_r (plPlotter *plotter, int dxc, int dyc, int dx0, int dy0, int dx1, int dy1);
101 int pl_bezier2_r (plPlotter *plotter, int x0, int y0, int x1, int y1, int x2, int y2);
102 int pl_bezier2rel_r (plPlotter *plotter, int dx0, int dy0, int dx1, int dy1, int dx2, int dy2);
103 int pl_bezier3_r (plPlotter *plotter, int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
104 int pl_bezier3rel_r (plPlotter *plotter, int dx0, int dy0, int dx1, int dy1, int dx2, int dy2, int dx3, int dy3);
105 int pl_bgcolor_r (plPlotter *plotter, int red, int green, int blue);
106 int pl_bgcolorname_r (plPlotter *plotter, const char *name);
107 int pl_boxrel_r (plPlotter *plotter, int dx0, int dy0, int dx1, int dy1);
108 int pl_capmod_r (plPlotter *plotter, const char *s);
109 int pl_circlerel_r (plPlotter *plotter, int dx, int dy, int r);
110 int pl_closepath_r (plPlotter *plotter);
111 int pl_color_r (plPlotter *plotter, int red, int green, int blue);
112 int pl_colorname_r (plPlotter *plotter, const char *name);
113 int pl_contrel_r (plPlotter *plotter, int x, int y);
114 int pl_ellarc_r (plPlotter *plotter, int xc, int yc, int x0, int y0, int x1, int y1);
115 int pl_ellarcrel_r (plPlotter *plotter, int dxc, int dyc, int dx0, int dy0, int dx1, int dy1);
116 int pl_ellipse_r (plPlotter *plotter, int x, int y, int rx, int ry, int angle);
117 int pl_ellipserel_r (plPlotter *plotter, int dx, int dy, int rx, int ry, int angle);
118 int pl_endpath_r (plPlotter *plotter);
119 int pl_endsubpath_r (plPlotter *plotter);
120 int pl_fillcolor_r (plPlotter *plotter, int red, int green, int blue);
121 int pl_fillcolorname_r (plPlotter *plotter, const char *name);
122 int pl_fillmod_r (plPlotter *plotter, const char *s);
123 int pl_filltype_r (plPlotter *plotter, int level);
124 int pl_flushpl_r (plPlotter *plotter);
125 int pl_fontname_r (plPlotter *plotter, const char *s);
126 int pl_fontsize_r (plPlotter *plotter, int size);
127 int pl_havecap_r (plPlotter *plotter, const char *s);
128 int pl_joinmod_r (plPlotter *plotter, const char *s);
129 int pl_labelwidth_r (plPlotter *plotter, const char *s);
130 int pl_linedash_r (plPlotter *plotter, int n, const int *dashes, int offset);
131 int pl_linerel_r (plPlotter *plotter, int dx0, int dy0, int dx1, int dy1);
132 int pl_linewidth_r (plPlotter *plotter, int size);
133 int pl_marker_r (plPlotter *plotter, int x, int y, int type, int size);
134 int pl_markerrel_r (plPlotter *plotter, int dx, int dy, int type, int size);
135 int pl_moverel_r (plPlotter *plotter, int x, int y);
136 int pl_orientation_r (plPlotter *plotter, int direction);
137 int pl_pencolor_r (plPlotter *plotter, int red, int green, int blue);
138 int pl_pencolorname_r (plPlotter *plotter, const char *name);
139 int pl_pentype_r (plPlotter *plotter, int level);
140 int pl_pointrel_r (plPlotter *plotter, int dx, int dy);
141 int pl_restorestate_r (plPlotter *plotter);
142 int pl_savestate_r (plPlotter *plotter);
143 int pl_space2_r (plPlotter *plotter, int x0, int y0, int x1, int y1, int x2, int y2);
144 int pl_textangle_r (plPlotter *plotter, int angle);
146 /* 32 floating point counterparts to some of the above (all GNU additions) */
147 double pl_ffontname_r (plPlotter *plotter, const char *s);
148 double pl_ffontsize_r (plPlotter *plotter, double size);
149 double pl_flabelwidth_r (plPlotter *plotter, const char *s);
150 double pl_ftextangle_r (plPlotter *plotter, double angle);
151 int pl_farc_r (plPlotter *plotter, double xc, double yc, double x0, double y0, double x1, double y1);
152 int pl_farcrel_r (plPlotter *plotter, double dxc, double dyc, double dx0, double dy0, double dx1, double dy1);
153 int pl_fbezier2_r (plPlotter *plotter, double x0, double y0, double x1, double y1, double x2, double y2);
154 int pl_fbezier2rel_r (plPlotter *plotter, double dx0, double dy0, double dx1, double dy1, double dx2, double dy2);
155 int pl_fbezier3_r (plPlotter *plotter, double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3);
156 int pl_fbezier3rel_r (plPlotter *plotter, double dx0, double dy0, double dx1, double dy1, double dx2, double dy2, double dx3, double dy3);
157 int pl_fbox_r (plPlotter *plotter, double x0, double y0, double x1, double y1);
158 int pl_fboxrel_r (plPlotter *plotter, double dx0, double dy0, double dx1, double dy1);
159 int pl_fcircle_r (plPlotter *plotter, double x, double y, double r);
160 int pl_fcirclerel_r (plPlotter *plotter, double dx, double dy, double r);
161 int pl_fcont_r (plPlotter *plotter, double x, double y);
162 int pl_fcontrel_r (plPlotter *plotter, double dx, double dy);
163 int pl_fellarc_r (plPlotter *plotter, double xc, double yc, double x0, double y0, double x1, double y1);
164 int pl_fellarcrel_r (plPlotter *plotter, double dxc, double dyc, double dx0, double dy0, double dx1, double dy1);
165 int pl_fellipse_r (plPlotter *plotter, double x, double y, double rx, double ry, double angle);
166 int pl_fellipserel_r (plPlotter *plotter, double dx, double dy, double rx, double ry, double angle);
167 int pl_flinedash_r (plPlotter *plotter, int n, const double *dashes, double offset);
168 int pl_fline_r (plPlotter *plotter, double x0, double y0, double x1, double y1);
169 int pl_flinerel_r (plPlotter *plotter, double dx0, double dy0, double dx1, double dy1);
170 int pl_flinewidth_r (plPlotter *plotter, double size);
171 int pl_fmarker_r (plPlotter *plotter, double x, double y, int type, double size);
172 int pl_fmarkerrel_r (plPlotter *plotter, double dx, double dy, int type, double size);
173 int pl_fmove_r (plPlotter *plotter, double x, double y);
174 int pl_fmoverel_r (plPlotter *plotter, double dx, double dy);
175 int pl_fpoint_r (plPlotter *plotter, double x, double y);
176 int pl_fpointrel_r (plPlotter *plotter, double dx, double dy);
177 int pl_fspace_r (plPlotter *plotter, double x0, double y0, double x1, double y1);
178 int pl_fspace2_r (plPlotter *plotter, double x0, double y0, double x1, double y1, double x2, double y2);
180 /* 6 floating point operations with no integer counterpart (GNU additions) */
181 int pl_fconcat_r (plPlotter *plotter, double m0, double m1, double m2, double m3, double m4, double m5);
182 int pl_fmiterlimit_r (plPlotter *plotter, double limit);
183 int pl_frotate_r (plPlotter *plotter, double theta);
184 int pl_fscale_r (plPlotter *plotter, double x, double y);
185 int pl_fsetmatrix_r (plPlotter *plotter, double m0, double m1, double m2, double m3, double m4, double m5);
186 int pl_ftranslate_r (plPlotter *plotter, double x, double y);
188 /* THE OLD (non-thread-safe) C API */
190 /* 3 functions specific to the old C API. (For construction/destruction
191 and selection of Plotters, and setting of Plotter parameters. The fact
192 that a single Plotter is globally `selected' makes the old API
194 int pl_newpl (const char *type, FILE *infile, FILE *outfile, FILE *errfile);
195 int pl_selectpl (int handle);
196 int pl_deletepl (int handle);
198 /* A function for setting parameters of Plotters that will subsequently be
199 created. This also makes the old API non-thread-safe. */
200 int pl_parampl (const char *parameter, void *value);
202 /* THE PLOTTER METHODS */
203 /* In the old API, the Plotter to be acted on is specified by first calling
206 /* 13 functions in traditional (pre-GNU) libplot */
207 int pl_arc (int xc, int yc, int x0, int y0, int x1, int y1);
208 int pl_box (int x0, int y0, int x1, int y1);
209 int pl_circle (int x, int y, int r);
210 int pl_closepl (void);
211 int pl_cont (int x, int y);
213 int pl_label (const char *s);
214 int pl_line (int x0, int y0, int x1, int y1);
215 int pl_linemod (const char *s);
216 int pl_move (int x, int y);
217 int pl_openpl (void);
218 int pl_point (int x, int y);
219 int pl_space (int x0, int y0, int x1, int y1);
221 /* 46 additional functions in GNU libplot, plus 1 obsolete function
223 FILE* pl_outfile (FILE* outfile);/* OBSOLETE */
224 int pl_alabel (int x_justify, int y_justify, const char *s);
225 int pl_arcrel (int dxc, int dyc, int dx0, int dy0, int dx1, int dy1);
226 int pl_bezier2 (int x0, int y0, int x1, int y1, int x2, int y2);
227 int pl_bezier2rel (int dx0, int dy0, int dx1, int dy1, int dx2, int dy2);
228 int pl_bezier3 (int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
229 int pl_bezier3rel (int dx0, int dy0, int dx1, int dy1, int dx2, int dy2, int dx3, int dy3);
230 int pl_bgcolor (int red, int green, int blue);
231 int pl_bgcolorname (const char *name);
232 int pl_boxrel (int dx0, int dy0, int dx1, int dy1);
233 int pl_capmod (const char *s);
234 int pl_circlerel (int dx, int dy, int r);
235 int pl_closepath (void);
236 int pl_color (int red, int green, int blue);
237 int pl_colorname (const char *name);
238 int pl_contrel (int x, int y);
239 int pl_ellarc (int xc, int yc, int x0, int y0, int x1, int y1);
240 int pl_ellarcrel (int dxc, int dyc, int dx0, int dy0, int dx1, int dy1);
241 int pl_ellipse (int x, int y, int rx, int ry, int angle);
242 int pl_ellipserel (int dx, int dy, int rx, int ry, int angle);
243 int pl_endpath (void);
244 int pl_endsubpath (void);
245 int pl_fillcolor (int red, int green, int blue);
246 int pl_fillcolorname (const char *name);
247 int pl_fillmod (const char *s);
248 int pl_filltype (int level);
249 int pl_flushpl (void);
250 int pl_fontname (const char *s);
251 int pl_fontsize (int size);
252 int pl_havecap (const char *s);
253 int pl_joinmod (const char *s);
254 int pl_labelwidth (const char *s);
255 int pl_linedash (int n, const int *dashes, int offset);
256 int pl_linerel (int dx0, int dy0, int dx1, int dy1);
257 int pl_linewidth (int size);
258 int pl_marker (int x, int y, int type, int size);
259 int pl_markerrel (int dx, int dy, int type, int size);
260 int pl_moverel (int x, int y);
261 int pl_orientation (int direction);
262 int pl_pencolor (int red, int green, int blue);
263 int pl_pencolorname (const char *name);
264 int pl_pentype (int level);
265 int pl_pointrel (int dx, int dy);
266 int pl_restorestate (void);
267 int pl_savestate (void);
268 int pl_space2 (int x0, int y0, int x1, int y1, int x2, int y2);
269 int pl_textangle (int angle);
271 /* 32 floating point counterparts to some of the above (all GNU additions) */
272 double pl_ffontname (const char *s);
273 double pl_ffontsize (double size);
274 double pl_flabelwidth (const char *s);
275 double pl_ftextangle (double angle);
276 int pl_farc (double xc, double yc, double x0, double y0, double x1, double y1);
277 int pl_farcrel (double dxc, double dyc, double dx0, double dy0, double dx1, double dy1);
278 int pl_fbezier2 (double x0, double y0, double x1, double y1, double x2, double y2);
279 int pl_fbezier2rel (double dx0, double dy0, double dx1, double dy1, double dx2, double dy2);
280 int pl_fbezier3 (double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3);
281 int pl_fbezier3rel (double dx0, double dy0, double dx1, double dy1, double dx2, double dy2, double dx3, double dy3);
282 int pl_fbox (double x0, double y0, double x1, double y1);
283 int pl_fboxrel (double dx0, double dy0, double dx1, double dy1);
284 int pl_fcircle (double x, double y, double r);
285 int pl_fcirclerel (double dx, double dy, double r);
286 int pl_fcont (double x, double y);
287 int pl_fcontrel (double dx, double dy);
288 int pl_fellarc (double xc, double yc, double x0, double y0, double x1, double y1);
289 int pl_fellarcrel (double dxc, double dyc, double dx0, double dy0, double dx1, double dy1);
290 int pl_fellipse (double x, double y, double rx, double ry, double angle);
291 int pl_fellipserel (double dx, double dy, double rx, double ry, double angle);
292 int pl_flinedash (int n, const double *dashes, double offset);
293 int pl_fline (double x0, double y0, double x1, double y1);
294 int pl_flinerel (double dx0, double dy0, double dx1, double dy1);
295 int pl_flinewidth (double size);
296 int pl_fmarker (double x, double y, int type, double size);
297 int pl_fmarkerrel (double dx, double dy, int type, double size);
298 int pl_fmove (double x, double y);
299 int pl_fmoverel (double dx, double dy);
300 int pl_fpoint (double x, double y);
301 int pl_fpointrel (double dx, double dy);
302 int pl_fspace (double x0, double y0, double x1, double y1);
303 int pl_fspace2 (double x0, double y0, double x1, double y1, double x2, double y2);
305 /* 6 floating point operations with no integer counterpart (GNU additions) */
306 int pl_fconcat (double m0, double m1, double m2, double m3, double m4, double m5);
307 int pl_fmiterlimit (double limit);
308 int pl_frotate (double theta);
309 int pl_fscale (double x, double y);
310 int pl_fsetmatrix (double m0, double m1, double m2, double m3, double m4, double m5);
311 int pl_ftranslate (double x, double y);
314 /* UNDOCUMENTED FONT API CALLS */
315 /* These are used by the graphics programs in the plotutils package (e.g.,
316 `graph') to access the font tables within libplot, so that the user can
317 be given lists of font names. */
319 void *_pl_get_hershey_font_info (plPlotter *plotter);
320 void *_pl_get_ps_font_info (plPlotter *plotter);
321 void *_pl_get_pcl_font_info (plPlotter *plotter);
322 void *_pl_get_stick_font_info (plPlotter *plotter);
326 /* THE GLOBAL VARIABLES IN GNU LIBPLOT */
327 /* There are two: user-settable error handlers (not yet documented). */
328 extern int (*pl_libplot_warning_handler) (const char *msg);
329 extern int (*pl_libplot_error_handler) (const char *msg);
334 /***********************************************************************/
336 /* Useful definitions, included in both plot.h and plotter.h. */
338 #ifndef _PL_LIBPLOT_USEFUL_DEFS
339 #define _PL_LIBPLOT_USEFUL_DEFS 1
341 /* Symbol types for the marker() function, extending over the range 0..31.
342 (1 through 5 are the same as in the GKS [Graphical Kernel System].)
344 These are now defined as enums rather than ints. Cast them to ints if
347 { M_NONE, M_DOT, M_PLUS, M_ASTERISK, M_CIRCLE, M_CROSS,
348 M_SQUARE, M_TRIANGLE, M_DIAMOND, M_STAR, M_INVERTED_TRIANGLE,
349 M_STARBURST, M_FANCY_PLUS, M_FANCY_CROSS, M_FANCY_SQUARE,
350 M_FANCY_DIAMOND, M_FILLED_CIRCLE, M_FILLED_SQUARE, M_FILLED_TRIANGLE,
351 M_FILLED_DIAMOND, M_FILLED_INVERTED_TRIANGLE, M_FILLED_FANCY_SQUARE,
352 M_FILLED_FANCY_DIAMOND, M_HALF_FILLED_CIRCLE, M_HALF_FILLED_SQUARE,
353 M_HALF_FILLED_TRIANGLE, M_HALF_FILLED_DIAMOND,
354 M_HALF_FILLED_INVERTED_TRIANGLE, M_HALF_FILLED_FANCY_SQUARE,
355 M_HALF_FILLED_FANCY_DIAMOND, M_OCTAGON, M_FILLED_OCTAGON
358 /* ONE-BYTE OPERATION CODES FOR GNU METAFILE FORMAT. These are now defined
359 as enums rather than ints. Cast them to ints if necessary.
361 There are 85 currently recognized op codes. The first 10 date back to
362 Unix plot(5) format. */
366 /* 10 op codes for primitive graphics operations, as in Unix plot(5) format. */
378 /* 42 op codes that are GNU extensions */
386 O_BOX = 'B', /* not an op code in Unix plot(5) */
391 O_CLOSEPL = 'x', /* not an op code in Unix plot(5) */
412 O_OPENPL = 'o', /* not an op code in Unix plot(5) */
422 /* 30 floating point counterparts to many of the above. They are not even
423 slightly mnemonic. */
427 O_FBEZIER2REL = '\'',
455 /* 3 op codes for floating point operations with no integer counterpart */
461 #endif /* not _PL_LIBPLOT_USEFUL_DEFS */
463 /***********************************************************************/
465 #endif /* not _PLOT_H_ */