1 /*****************************************************************************
2 ** This is part of the CTSim program
3 ** Copyright (C) 1983-2000 Kevin Rosenberg
5 ** $Id: ezplot.h,v 1.4 2000/05/24 22:48:17 kevin Exp $
7 ** Revision 1.4 2000/05/24 22:48:17 kevin
8 ** First functional version of SDF library for X-window
10 ** Revision 1.3 2000/05/07 12:46:19 kevin
11 ** made c++ compatible
13 ** Revision 1.2 2000/04/28 14:14:16 kevin
14 ** *** empty log message ***
17 ** This program is free software; you can redistribute it and/or modify
18 ** it under the terms of the GNU General Public License (version 2) as
19 ** published by the Free Software Foundation.
21 ** This program is distributed in the hope that it will be useful,
22 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
23 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 ** GNU General Public License for more details.
26 ** You should have received a copy of the GNU General Public License
27 ** along with this program; if not, write to the Free Software
28 ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
29 ******************************************************************************/
30 /*----------------------------------------------------------------------*/
33 /*----------------------------------------------------------------------*/
40 #endif /* __cplusplus */
52 #define MAXLABEL 40 /* maximum length of axis label */
53 #define MAXTITLE 40 /* maximum length of a title */
54 #define MAXLEGEND 20 /* maximum length of a legend */
55 #define MAXCURVES 10 /* maximum number of curves that can be plotted */
56 #define MAXPTS 200 /* max number of points that can be read with
57 DATA command in INTERACTIVE mode */
66 char legend[MAXLEGEND+1];
70 #define YBUF_DEF XBUF_DEF * (72. / 120.) * 0.75
73 /*----------------------------------------------------------------------*/
75 /*----------------------------------------------------------------------*/
104 #define S_XLENGTH -33
105 #define S_YLENGTH -34
111 #define S_NOLABEL -40
114 #define S_XAUTOSCALE -43
115 #define S_YAUTOSCALE -44
124 #define S_NOXAXIS -53
125 #define S_NOYAXIS -54
126 #define S_XPORIGIN -55
127 #define S_YPORIGIN -56
134 #define S_RESTORE -63
136 #define S_UFINISH -65
139 #define S_INTERACTIVE -68
147 #define S_NOGRID -103
151 #define S_LEGENDBOX -107
157 #define S_TEXTSIZE -120
160 #define S_PRTMODE -123
162 /*----------------------------------------------------------------------*/
163 /* GLOBAL VARIABLES */
164 /*----------------------------------------------------------------------*/
166 /* axis definitions */
167 #define LINEAR 1 /* linear axis */
168 #define LOG 2 /* logrithmic axis */
169 #define NOAXIS 3 /* don't plot axis */
171 /* tick definitions */
186 /* symbol definitions */
191 #define SB_ERRORBAR 5
194 #define INSIDE 1 /* values of o_legendbox */
198 /*-----------------------------------------------------------------------------
202 * i_ Internal variable
205 * Normal variable that is user modifiable
206 * These variables must always have a valid value
208 * Variables controlling devices
209 * clr_ Color variable
210 * Holds a color value
211 * c_ Character string variable
212 * Contains a character string
214 * User modifiable variable associated with the set variable (s_)
215 * These variables do not always have a valid value
216 * These variables change assumption EZPLOT makes about the plot
218 * TRUE if associated value variable (v_) has been set by the user
219 *---------------------------------------------------------------------------*/
228 struct ezp_curve_st curve[MAXCURVES];
230 /*--------------------*/
231 /* INTERNAL VARIABLES */
232 /*--------------------*/
234 bool i_plotimmediate; /* indicates that a call to EZPLOT is a signal
235 to print all received arrays. EZSET uses
236 this variable to force EZPLOT to replot
238 int i_numcurves; /* number of curves received by EZPLOT */
240 /*------------------*/
241 /* DEVICE VARIABLES */
242 /*------------------*/
244 bool d_usecrt; /* TRUE if want to use CRT as output device */
245 bool d_useprt; /* TRUE if wamt to use printer as output device */
247 int d_crtmode; /* Controls which crt mode to use for plot */
248 int d_prtmode; /* Controls mode of printer output */
250 int d_xprtbuf, d_yprtbuf; /* Size of printer buffer in pixels */
252 /*-----------------*/
253 /* COLOR VARIABLES */
254 /*-----------------*/
256 int clr_axis; /* color of all axis lines */
257 int clr_title; /* color of main title */
258 int clr_label; /* color of axis labels */
259 int clr_legend; /* color of legend box */
260 int clr_grid; /* color of grid lines */
261 int clr_number; /* color of axis number labels */
263 /*------------------*/
264 /* OPTION VARIABLES */
265 /*------------------*/
267 int o_reqcurves; /* # of curves specified in CURVES command */
268 /* default value is 1, so that a call to EZPLOT
270 bool o_unknowncurves; /* TRUE when the user specifies that the
271 number of curves is unknown */
273 bool o_ustart, o_ufinish; /* TRUE if user initiates or terminate sgp */
275 double o_xporigin, o_yporigin; /* origin of plot frame in NDC */
276 double o_xlength, o_ylength; /* length of plot frame in NDC */
278 char c_xlabel[MAXLABEL+1]; /* label for x axis */
279 char c_ylabel[MAXLABEL+1]; /* label for y axis */
280 char c_title[MAXTITLE+1]; /* title to print above graph */
281 char c_legend[MAXLEGEND+1]; /* current legend specified */
283 int o_linestyle, o_color; /* style to use for curves all subsequent */
284 /* curves to EZPLOT */
285 bool o_xaxis, o_yaxis; /* Specifies where axis & labels are drawn */
286 bool o_grid; /* Flag to draw a grid at major ticks */
287 bool o_box; /* Flag to draw a box around the graph */
289 int o_xticks, o_yticks; /* direction to draw tick marks */
290 bool o_xtlabel, o_ytlabel; /* TRUE if label tick marks */
292 int o_xmajortick, o_ymajortick; /* number of major ticks to draw */
293 int o_xminortick, o_yminortick; /* number of minor ticks between major ticks */
295 int o_symbol; /* Symbol type, (0 = no symbol) */
296 int o_symfreq; /* frequency to draw symbols at curve points */
298 int o_legendbox; /* controls whether legend is inside */
299 /* or outside of the axis extents */
300 int o_tag; /* controls whether to draw tag at end of axes */
302 /*-----------------------*/
303 /* VALUE & SET variables */
304 /*-----------------------*/
306 double v_xmin, v_xmax, v_ymin, v_ymax; /* user supplied axis endpoints */
307 bool s_xmin, s_xmax, s_ymin, s_ymax; /* TRUE is endpoint has been set */
309 double v_xtitle, v_ytitle; /* NDC position to plot title */
310 bool s_xtitle, s_ytitle; /* TRUE if set position for title */
311 double v_xcross, v_ycross; /* position that axes cross */
312 bool s_xcross, s_ycross; /* TRUE if set axes cross position */
314 double v_xlegend, v_ylegend; /* upper-left position of legend box in NDC */
315 bool s_xlegend, s_ylegend; /* TRUE if set position of legend box */
317 int v_lxfrac, v_lyfrac; /* number of digits to right of decimal place */
318 bool s_lxfrac, s_lyfrac; /* TRUE if set number of fractional digits */
320 double v_textsize; /* size of text in NDC */
321 bool s_textsize; /* TRUE if user set size of text */
323 }; /* end of EZPLOT VARIABLES */
327 extern struct ezplot_var ez;
328 extern bool ezplot_firstcall; /* set to false on first call to EZSET or EZPLOT */
332 int axis_scale (double min, double max, int nint, double *minp, double *maxp, int *nintp);
335 SGP_ID ezplot(double x[], double y[], int num);
341 void ezplot_1d(double *y, int n);
344 int ezset(char *command);
347 void make_numfmt(char *fmtstr, int *fldwid, int *nfrac, double min, double max, int nint);
351 #endif /* __cplusplus */