1 /*----------------------------------------------------------------------*/
4 /*----------------------------------------------------------------------*/
18 #define MAXLABEL 40 /* maximum length of axis label */
19 #define MAXTITLE 40 /* maximum length of a title */
20 #define MAXLEGEND 20 /* maximum length of a legend */
21 #define MAXCURVES 10 /* maximum number of curves that can be plotted */
22 #define MAXPTS 200 /* max number of points that can be read with
23 DATA command in INTERACTIVE mode */
32 char legend[MAXLEGEND+1];
36 #define YBUF_DEF XBUF_DEF * (72. / 120.) * 0.75
39 /*----------------------------------------------------------------------*/
41 /*----------------------------------------------------------------------*/
80 #define S_XAUTOSCALE -43
81 #define S_YAUTOSCALE -44
92 #define S_XPORIGIN -55
93 #define S_YPORIGIN -56
100 #define S_RESTORE -63
102 #define S_UFINISH -65
105 #define S_INTERACTIVE -68
113 #define S_NOGRID -103
117 #define S_LEGENDBOX -107
123 #define S_TEXTSIZE -120
126 #define S_PRTMODE -123
128 /*----------------------------------------------------------------------*/
129 /* GLOBAL VARIABLES */
130 /*----------------------------------------------------------------------*/
132 /* axis definitions */
133 #define LINEAR 1 /* linear axis */
134 #define LOG 2 /* logrithmic axis */
135 #define NOAXIS 3 /* don't plot axis */
137 /* tick definitions */
152 /* symbol definitions */
157 #define SB_ERRORBAR 5
160 #define INSIDE 1 /* values of o_legendbox */
164 /*-----------------------------------------------------------------------------
168 * i_ Internal variable
171 * Normal variable that is user modifiable
172 * These variables must always have a valid value
174 * Variables controlling devices
175 * clr_ Color variable
176 * Holds a color value
177 * c_ Character string variable
178 * Contains a character string
180 * User modifiable variable associated with the set variable (s_)
181 * These variables do not always have a valid value
182 * These variables change assumption EZPLOT makes about the plot
184 * TRUE if associated value variable (v_) has been set by the user
185 *---------------------------------------------------------------------------*/
194 struct ezp_curve_st curve[MAXCURVES];
196 /*--------------------*/
197 /* INTERNAL VARIABLES */
198 /*--------------------*/
200 bool i_plotimmediate; /* indicates that a call to EZPLOT is a signal
201 to print all received arrays. EZSET uses
202 this variable to force EZPLOT to replot
204 int i_numcurves; /* number of curves received by EZPLOT */
206 /*------------------*/
207 /* DEVICE VARIABLES */
208 /*------------------*/
210 bool d_usecrt; /* TRUE if want to use CRT as output device */
211 bool d_useprt; /* TRUE if wamt to use printer as output device */
213 int d_crtmode; /* Controls which crt mode to use for plot */
214 int d_prtmode; /* Controls mode of printer output */
216 int d_xprtbuf, d_yprtbuf; /* Size of printer buffer in pixels */
218 /*-----------------*/
219 /* COLOR VARIABLES */
220 /*-----------------*/
222 int clr_axis; /* color of all axis lines */
223 int clr_title; /* color of main title */
224 int clr_label; /* color of axis labels */
225 int clr_legend; /* color of legend box */
226 int clr_grid; /* color of grid lines */
227 int clr_number; /* color of axis number labels */
229 /*------------------*/
230 /* OPTION VARIABLES */
231 /*------------------*/
233 int o_reqcurves; /* # of curves specified in CURVES command */
234 /* default value is 1, so that a call to EZPLOT
236 bool o_unknowncurves; /* TRUE when the user specifies that the
237 number of curves is unknown */
239 bool o_ustart, o_ufinish; /* TRUE if user initiates or terminate sgp */
241 double o_xporigin, o_yporigin; /* origin of plot frame in NDC */
242 double o_xlength, o_ylength; /* length of plot frame in NDC */
244 char c_xlabel[MAXLABEL+1]; /* label for x axis */
245 char c_ylabel[MAXLABEL+1]; /* label for y axis */
246 char c_title[MAXTITLE+1]; /* title to print above graph */
247 char c_legend[MAXLEGEND+1]; /* current legend specified */
249 int o_linestyle, o_color; /* style to use for curves all subsequent */
250 /* curves to EZPLOT */
251 bool o_xaxis, o_yaxis; /* Specifies where axis & labels are drawn */
252 bool o_grid; /* Flag to draw a grid at major ticks */
253 bool o_box; /* Flag to draw a box around the graph */
255 int o_xticks, o_yticks; /* direction to draw tick marks */
256 bool o_xtlabel, o_ytlabel; /* TRUE if label tick marks */
258 int o_xmajortick, o_ymajortick; /* number of major ticks to draw */
259 int o_xminortick, o_yminortick; /* number of minor ticks between major ticks */
261 int o_symbol; /* Symbol type, (0 = no symbol) */
262 int o_symfreq; /* frequency to draw symbols at curve points */
264 int o_legendbox; /* controls whether legend is inside */
265 /* or outside of the axis extents */
266 int o_tag; /* controls whether to draw tag at end of axes */
268 /*-----------------------*/
269 /* VALUE & SET variables */
270 /*-----------------------*/
272 double v_xmin, v_xmax, v_ymin, v_ymax; /* user supplied axis endpoints */
273 bool s_xmin, s_xmax, s_ymin, s_ymax; /* TRUE is endpoint has been set */
275 double v_xtitle, v_ytitle; /* NDC position to plot title */
276 bool s_xtitle, s_ytitle; /* TRUE if set position for title */
277 double v_xcross, v_ycross; /* position that axes cross */
278 bool s_xcross, s_ycross; /* TRUE if set axes cross position */
280 double v_xlegend, v_ylegend; /* upper-left position of legend box in NDC */
281 bool s_xlegend, s_ylegend; /* TRUE if set position of legend box */
283 int v_lxfrac, v_lyfrac; /* number of digits to right of decimal place */
284 bool s_lxfrac, s_lyfrac; /* TRUE if set number of fractional digits */
286 double v_textsize; /* size of text in NDC */
287 bool s_textsize; /* TRUE if user set size of text */
289 }; /* end of EZPLOT VARIABLES */
293 extern struct ezplot_var ez;
294 extern bool ezplot_firstcall; /* set to false on first call to EZSET or EZPLOT */
298 int axis_scale(double min, double max, int nint, double *minp, double *maxp, int *nintp);
300 int ezplot(double x[], double y[], int num);
305 void ezplot_1d(double *y, int n);
307 int ezset(char *command);
309 void make_numfmt(char *fmtstr, int *fldwid, int *nfrac, double min, double max, int nint);