source: Sophya/trunk/SophyaPI/PIGcont/myaxis.h@ 1838

Last change on this file since 1838 was 1838, checked in by ansari, 24 years ago

Nettoyage des .h en trop, compil avec g++ sous LinuxPPC (rename alloc.h gp_alloc.h) - Reza 21/12/2001

File size: 21.4 KB
RevLine 
[1829]1/*
[1838]2 * $Id: myaxis.h,v 1.2 2001-12-21 22:49:27 ansari Exp $
[1829]3 *
4 */
5#include <stdio.h>
6/*[
7 * Copyright 2000 Thomas Williams, Colin Kelley
8 *
9 * Permission to use, copy, and distribute this software and its
10 * documentation for any purpose with or without fee is hereby granted,
11 * provided that the above copyright notice appear in all copies and
12 * that both that copyright notice and this permission notice appear
13 * in supporting documentation.
14 *
15 * Permission to modify the software is granted, but not the right to
16 * distribute the complete modified source code. Modifications are to
17 * be distributed as patches to the released version. Permission to
18 * distribute binaries produced by compiling modified sources is granted,
19 * provided you
20 * 1. distribute the corresponding source modifications from the
21 * released version in the form of a patch file along with the binaries,
22 * 2. add special version identification to distinguish your version
23 * in addition to the base release version number,
24 * 3. provide your name and address as the primary contact for the
25 * support of your modified version, and
26 * 4. retain our contact information in regard to use of the base
27 * software.
28 * Permission to distribute the released version of the source code along
29 * with corresponding source modifications in the form of a patch file is
30 * granted with same provisions 2 through 4 for binary distributions.
31 *
32 * This software is provided "as is" without express or implied warranty
33 * to the extent permitted by applicable law.
34]*/
35
36#ifndef GNUPLOT_AXIS_H
37#define GNUPLOT_AXIS_H
38
39#include "mymisc.h"
40/*#include "gp_types.h" */ /* for TBOOLEAN */
41
42/*#include "gadgets.h"*/
43/*#include "parse.h" */ /* for const_express() */
44/*#include "tables.h" */ /* for the axis name parse table */
45/*#include "term_api.h" */ /* for lp_style_type */
46/*#include "util.h" */ /* for int_error() */
47/****/
48
49/* typedefs / #defines */
[1838]50#ifndef TRUE
51#define TRUE -1
52#define FALSE 0
53#endif
[1829]54
55/* give some names to some array elements used in command.c and grap*.c
56 * maybe one day the relevant items in setshow will also be stored
57 * in arrays.
58 *
59 * Always keep the following conditions alive:
60 * SECOND_X_AXIS = FIRST_X_AXIS + SECOND_AXES
61 * FIRST_X_AXIS & SECOND_AXES == 0
62 */
63
64typedef enum AXIS_INDEX {
65#define FIRST_AXES 0
66 FIRST_Z_AXIS,
67 FIRST_Y_AXIS,
68 FIRST_X_AXIS,
69 T_AXIS, /* fill gap */
70#define SECOND_AXES 4
71 SECOND_Z_AXIS, /* not used, yet */
72 SECOND_Y_AXIS,
73 SECOND_X_AXIS,
74 R_AXIS, /* never used ? */
75 U_AXIS, /* dito */
76 V_AXIS /* dito */
77#ifdef PM3D
78 ,COLOR_AXIS
79#endif
80} AXIS_INDEX ;
81
82#ifdef PM3D
83# define AXIS_ARRAY_SIZE 11
84#else
85# define AXIS_ARRAY_SIZE 10
86#endif
87
88
89/* What kind of ticmarking is wanted? */
90typedef enum en_ticseries_type {
91 TIC_COMPUTED=1, /* default; gnuplot figures them */
92 TIC_SERIES, /* user-defined series */
93 TIC_USER, /* user-defined points */
94 TIC_MONTH, /* print out month names ((mo-1)%12)+1 */
95 TIC_DAY /* print out day of week */
96} t_ticseries_type;
97
98/* Defines one ticmark for TIC_USER style.
99 * If label==NULL, the value is printed with the usual format string.
100 * else, it is used as the format string (note that it may be a constant
101 * string, like "high" or "low").
102 */
103typedef struct ticmark {
104 double position; /* where on axis is this */
105 char *label; /* optional (format) string label */
106 struct ticmark *next; /* linked list */
107} ticmark;
108
109/* Tic-mark labelling definition; see set xtics */
110typedef struct ticdef {
111 t_ticseries_type type;
112 union {
113 struct ticmark *user; /* for TIC_USER */
114 struct { /* for TIC_SERIES */
115 double start, incr;
116 double end; /* ymax, if VERYLARGE */
117 } series;
118 } def;
119} t_ticdef;
120
121/* we want two auto modes for minitics - default where minitics are
122 * auto for log/time and off for linear, and auto where auto for all
123 * graphs I've done them in this order so that logscale-mode can
124 * simply test bit 0 to see if it must do the minitics automatically.
125 * similarly, conventional plot can test bit 1 to see if minitics are
126 * required */
127enum en_minitics_status {
128 MINI_OFF,
129 MINI_DEFAULT,
130 MINI_USER,
131 MINI_AUTO
132};
133
134/* Function pointer type for callback functions doing operations for a
135 * single ticmark */
136/*typedef void (*tic_callback) __PROTO((AXIS_INDEX, double, char *, struct lp_style_type ));*/
137
138/* Values to put in the axis_tics[] variables that decides where the
139 * ticmarks should be drawn: not at all, on one or both plot borders,
140 * or the zeroaxes. These look like a series of values, but TICS_MASK
141 * shows that they're actually bit masks --> don't turn into an enum
142 * */
143#define NO_TICS 0
144#define TICS_ON_BORDER 1
145#define TICS_ON_AXIS 2
146#define TICS_MASK 3
147#define TICS_MIRROR 4
148
149
150/* Need to allow user to choose grid at first and/or second axes tics.
151 * Also want to let user choose circles at x or y tics for polar grid.
152 * Also want to allow user rectangular grid for polar plot or polar
153 * grid for parametric plot. So just go for full configurability.
154 * These are bitmasks
155 */
156#define GRID_OFF 0
157#define GRID_X (1<<0)
158#define GRID_Y (1<<1)
159#define GRID_Z (1<<2)
160#define GRID_X2 (1<<3)
161#define GRID_Y2 (1<<4)
162#define GRID_MX (1<<5)
163#define GRID_MY (1<<6)
164#define GRID_MZ (1<<7)
165#define GRID_MX2 (1<<8)
166#define GRID_MY2 (1<<9)
167/* GRID_{M}CB only for PM3D, but defined always for source code readability */
168#define GRID_CB (1<<10)
169#define GRID_MCB (1<<11)
170
171/* HBB 20010610: new type for storing autoscale activity. Effectively
172 * two booleans (bits) in a single variable, so I'm using an enum with
173 * all 4 possible bit masks given readable names. */
174typedef enum e_autoscale {
175 AUTOSCALE_NONE = 0,
176 AUTOSCALE_MIN = 1<<0,
177 AUTOSCALE_MAX = 1<<1,
178 AUTOSCALE_BOTH = (1<<0 | 1 << 1),
179 AUTOSCALE_FIXMIN = 1<<2,
180 AUTOSCALE_FIXMAX = 1<<3
181} t_autoscale;
182
183
184/* HBB 20000725: gather all per-axis variables into a struct, and set up
185 * a single large array of such structs */
186/* FIXME 20000725: collect some of those various TBOOLEAN fields into
187 * a larger int (or -- shudder -- a bitfield?) */
188typedef struct axis {
189/* range of this axis */
190 t_autoscale autoscale; /* Which end(s) are autoscaled? */
191 t_autoscale set_autoscale; /* what does 'set' think autoscale to be? */
192 int range_flags; /* flag bits about autoscale/writeback: */
193 /* write auto-ed ranges back to variables for autoscale */
194#define RANGE_WRITEBACK 1
195 /* allow auto and reversed ranges */
196#define RANGE_REVERSE 2
197 TBOOLEAN reverse_range; /* range [high:low] silently reverted? */
198 double min; /* 'transient' axis extremal values */
199 double max;
200 double set_min; /* set/show 'permanent' values */
201 double set_max;
202 double writeback_min; /* ULIG's writeback implementation */
203 double writeback_max;
204
205/* output-related quantities */
206 int term_lower; /* low and high end of the axis on output, */
207 int term_upper; /* ... (in terminal coordinates)*/
208 double term_scale; /* scale factor: plot --> term coords */
209 unsigned int term_zero; /* position of zero axis */
210
211/* log axis control */
212 TBOOLEAN log; /* log axis stuff: flag "islog?" */
213 double base; /* logarithm base value */
214 double log_base; /* ln(base), for easier computations */
215
216/* time/date axis control */
217 TBOOLEAN is_timedata; /* is this a time/date axis? */
218 TBOOLEAN format_is_numeric; /* format string looks like numeric??? */
219 char timefmt[MAX_ID_LEN+1]; /* format string for input */
220 char formatstring[MAX_ID_LEN+1];
221 /* the format string for output */
222
223/* ticmark control variables */
224 int ticmode; /* tics on border/axis? mirrored? */
225 struct ticdef ticdef; /* tic series definition */
226 TBOOLEAN tic_rotate; /* ticmarks rotated (vertical text)? */
227 int minitics; /* minor tic mode (none/auto/user)? */
228 double mtic_freq; /* minitic stepsize */
229
230/* other miscellaneous fields */
231 label_struct label; /* label string and position offsets */
232 /*lp_style_type zeroaxis;*/ /* drawing style for zeroaxis, if any */
233} AXIS;
234
235#define DEFAULT_AXIS_TICDEF {TIC_COMPUTED, {NULL} }
236#ifdef PM3D
237# define DEFAULT_AXIS_ZEROAXIS {0, -3, 0, 1.0, 1.0, 0}
238#else
239# define DEFAULT_AXIS_ZEROAXIS {0, -3, 0, 1.0, 1.0}
240#endif
241#define DEFAULT_AXIS_STRUCT { \
242 AUTOSCALE_BOTH, AUTOSCALE_BOTH, /* auto, set_auto */ \
243 0, FALSE, /* range_flags, rev_range */ \
244 -10.0, 10.0, /* 3 pairs of min/max */ \
245 -10.0, 10.0, \
246 -10.0, 10.0, \
247 0, 0, 0, 0, /* terminal dependents */ \
248 FALSE, 0.0, 0.0, /* log, base, log(base) */ \
249 0, 1, /* is_timedata, format_numeric */ \
250 DEF_FORMAT, TIMEFMT, /* output format, timefmt */ \
251 NO_TICS, /* tic output positions (border, mirror) */ \
252 DEFAULT_AXIS_TICDEF, /* tic series definition */ \
253 FALSE, MINI_DEFAULT, 10, /* tic_rotate, minitics, mtic_freq */ \
254 EMPTY_LABELSTRUCT/**,**/ /* axis label */ \
255 /**DEFAULT_AXIS_ZEROAXIS**/} /* zeroaxis line style */
256
257/* Table of default behaviours --- a subset of the struct above. Only
258 * those fields are present that differ from axis to axis. */
259typedef struct axis_defaults {
260 double min; /* default axis endpoints */
261 double max;
262 char name[4]; /* axis name, like in "x2" or "t" */
263 int ticmode; /* tics on border/axis? mirrored? */
264} AXIS_DEFAULTS;
265
266
267
268/* global variables in axis.c */
269
270extern AXIS axis_array[AXIS_ARRAY_SIZE];
271extern AXIS_DEFAULTS axis_defaults[AXIS_ARRAY_SIZE];
272
273/* A parsing table for mapping axis names into axis indices. For use
274 * by the set/show machinery, mainly */
275extern struct gen_table axisname_tbl[AXIS_ARRAY_SIZE+1];
276
277
278extern const struct ticdef default_axis_ticdef;
279
280extern double ticscale; /* scale factor for tic marks (was (0..1])*/
281extern double miniticscale; /* and for minitics */
282extern TBOOLEAN tic_in; /* tics to be drawn inward? */
283
284
285/* default format for tic mark labels */
286#define DEF_FORMAT "% g"
287
288/* default parse timedata string */
289#define TIMEFMT "%d/%m/%y,%H:%M"
290
291/* axis labels */
292extern const label_struct default_axis_label;
293
294/* zeroaxis linetype (flag type==-3 if none wanted) */
295
296/***extern const lp_style_type default_axis_zeroaxis;***/
297
298/* grid drawing control variables */
299extern int grid_selection;
300/***extern const struct lp_style_type default_grid_lp;***/ /* default for 'unset' */
301/***extern struct lp_style_type grid_lp;***/ /* linestyle for major grid lines */
302/***extern struct lp_style_type mgrid_lp;***/ /* linestyle for minor grid lines */
303/***extern double polar_grid_angle;***/ /* angle step in polar grid in radians */
304
305/* global variables for communication with the tic callback functions */
306
307extern int tic_start, tic_direction, tic_text,
308 rotate_tics, tic_hjust, tic_vjust, tic_mirror;
309
310/* axes being used by the current plot */
311extern AXIS_INDEX x_axis, y_axis, z_axis;
312/* macros to reduce code clutter caused by the array notation, mainly
313 * in graphics.c and fit.c */
314#define X_AXIS axis_array[x_axis]
315#define Y_AXIS axis_array[y_axis]
316#define Z_AXIS axis_array[z_axis]
317#ifdef PM3D
318#define CB_AXIS axis_array[COLOR_AXIS]
319#endif
320
321/* -------- macros using these variables: */
322
323/* Macros to map from user to terminal coordinates and back */
324#define AXIS_MAP(axis, variable) \
325 (int) ((axis_array[axis].term_lower) \
326 + ((variable) - axis_array[axis].min) \
327 * axis_array[axis].term_scale + 0.5)
328#define AXIS_MAPBACK(axis, pos) \
329 (((double)(pos)-axis_array[axis].term_lower)/axis_array[axis].term_scale \
330 + axis_array[axis].min)
331
332/* these are the old names for these: */
333#define map_x(x) AXIS_MAP(x_axis, x)
334#define map_y(y) AXIS_MAP(y_axis, y)
335
336#define AXIS_SETSCALE(axis, out_low, out_high) \
337 axis_array[axis].term_scale = ((out_high) - (out_low)) \
338 / (axis_array[axis].max - axis_array[axis].min)
339
340/* write current min/max_array contents into the set/show status
341 * variables */
342#define AXIS_WRITEBACK(axis) \
343do { \
344 AXIS *this = axis_array + axis; \
345 \
346 if (this->range_flags & RANGE_WRITEBACK) { \
347 if (this->autoscale & AUTOSCALE_MIN) \
348 this->set_min = this->min; \
349 if (this->autoscale & AUTOSCALE_MAX) \
350 this->set_max = this->max; \
351 } \
352} while(0)
353
354/* HBB 20000430: New macros, logarithmize a value into a stored
355 * coordinate*/
356#define AXIS_DO_LOG(axis,value) (log(value) / axis_array[axis].log_base)
357#define AXIS_UNDO_LOG(axis,value) exp((value) * axis_array[axis].log_base)
358
359/* HBB 20000430: same, but these test if the axis is log, first: */
360#define AXIS_LOG_VALUE(axis,value) \
361 (axis_array[axis].log ? AXIS_DO_LOG(axis,value) : (value))
362#define AXIS_DE_LOG_VALUE(axis,coordinate) \
363 (axis_array[axis].log ? AXIS_UNDO_LOG(axis,coordinate): (coordinate))
364
365
366/* copy scalar data to arrays. The difference between 3D and 2D
367 * versions is: dont know we have to support ranges [10:-10] - lets
368 * reverse it for now, then fix it at the end. */
369/* FIXME HBB 20000426: unknown if this distinction makes any sense... */
370#define AXIS_INIT3D(axis, islog_override, infinite) \
371do { \
372 AXIS *this = axis_array + axis; \
373 \
374 if ((this->autoscale = this->set_autoscale) == AUTOSCALE_NONE \
375 && this->set_max < this->set_min) { \
376 this->min = this->set_max; \
377 this->max = this->set_min; \
378 /* we will fix later */ \
379 } else { \
380 this->min = (infinite && (this->set_autoscale & AUTOSCALE_MIN)) \
381 ? VERYLARGE : this->set_min; \
382 this->max = (infinite && (this->set_autoscale & AUTOSCALE_MAX)) \
383 ? -VERYLARGE : this->set_max; \
384 } \
385 if (islog_override) { \
386 this->log = 0; \
387 this->base = 1; \
388 this->log_base = 0; \
389 } else { \
390 this->log_base = this->log ? log(this->base) : 0; \
391 } \
392} while(0)
393
394#define AXIS_INIT2D(axis, infinite) \
395do { \
396 AXIS *this = axis_array + axis; \
397 \
398 this->autoscale = this->set_autoscale; \
399 this->min = (infinite && (this->set_autoscale & AUTOSCALE_MIN)) \
400 ? VERYLARGE : this->set_min; \
401 this->max = (infinite && (this->set_autoscale & AUTOSCALE_MAX)) \
402 ? -VERYLARGE : this->set_max; \
403 this->log_base = this->log ? log(this->base) : 0; \
404} while(0)
405
406/* handle reversed ranges */
407#define CHECK_REVERSE(axis) \
408do { \
409 AXIS *this = axis_array + axis; \
410 \
411 if ((this->autoscale == AUTOSCALE_NONE) \
412 && (this->max < this->min) \
413 ) { \
414 double temp = this->min; \
415 this->min = this->max; \
416 this->max = temp; \
417 this->reverse_range = 1; \
418 } else \
419 this->reverse_range = (this->range_flags & RANGE_REVERSE); \
420} while(0)
421
422/* HBB 20000725: new macro, built upon ULIG's SAVE_WRITEBACK(axis),
423 * but easier to use. Code like this occured twice, in plot2d and
424 * plot3d: */
425#define SAVE_WRITEBACK_ALL_AXES \
426do { \
427 AXIS_INDEX axis; \
428 \
429 for (axis = 0; axis < AXIS_ARRAY_SIZE; axis++) \
430 if(axis_array[axis].range_flags & RANGE_WRITEBACK) { \
431 set_writeback_min(axis); \
432 set_writeback_max(axis); \
433 } \
434} while(0)
435
436/* get optional [min:max] */
437#define PARSE_RANGE(axis) \
438do { \
439 if (equals(c_token, "[")) { \
440 c_token++; \
441 axis_array[axis].autoscale = \
442 load_range(axis, &axis_array[axis].min, &axis_array[axis].max, \
443 axis_array[axis].autoscale); \
444 if (!equals(c_token, "]")) \
445 int_error(c_token, "']' expected"); \
446 c_token++; \
447 } \
448} while (0)
449
450/* HBB 20000430: new macro, like PARSE_RANGE, but for named ranges as
451 * in 'plot [phi=3.5:7] sin(phi)' */
452#define PARSE_NAMED_RANGE(axis, dummy_token) \
453do { \
454 if (equals(c_token, "[")) { \
455 c_token++; \
456 if (isletter(c_token)) { \
457 if (equals(c_token + 1, "=")) { \
458 dummy_token = c_token; \
459 c_token += 2; \
460 } \
461 /* oops; probably an expression with a variable: act \
462 * as if no variable name had been seen, by \
463 * fallthrough */ \
464 } \
465 axis_array[axis].autoscale = load_range(axis, &axis_array[axis].min, \
466 &axis_array[axis].max, \
467 axis_array[axis].autoscale); \
468 if (!equals(c_token, "]")) \
469 int_error(c_token, "']' expected"); \
470 c_token++; \
471 } /* first '[' */ \
472} while (0)
473
474/* parse a position of the form
475 * [coords] x, [coords] y {,[coords] z}
476 * where coords is one of first,second.graph,screen
477 * if first or second, we need to take axis_is_timedata into account
478 */
479#define GET_NUMBER_OR_TIME(store,axes,axis) \
480do { \
481 if (((axes) >= 0) && (axis_array[(axes)+(axis)].is_timedata) \
482 && isstring(c_token)) { \
483 char ss[80]; \
484 struct tm tm; \
485 quote_str(ss,c_token, 80); \
486 ++c_token; \
487 if (gstrptime(ss,axis_array[axis].timefmt,&tm)) \
488 (store) = (double) gtimegm(&tm); \
489 } else { \
490 struct value value; \
491 (store) = real(const_express(&value)); \
492 } \
493} while(0)
494
495/* This is one is very similar to GET_NUMBER_OR_TIME, but has slightly
496 * different usage: it writes out '0' in case of inparsable time data,
497 * and it's used when the target axis is fixed without a 'first' or
498 * 'second' keyword in front of it. */
499#define GET_NUM_OR_TIME(store,axis) \
500do { \
501 (store) = 0; \
502 GET_NUMBER_OR_TIME(store, FIRST_AXES, axis); \
503} while (0);
504
505/* store VALUE or log(VALUE) in STORE, set TYPE as appropriate
506 * Do OUT_ACTION or UNDEF_ACTION as appropriate
507 * adjust range provided type is INRANGE (ie dont adjust y if x is outrange
508 * VALUE must not be same as STORE
509 */
510
511#define STORE_WITH_LOG_AND_UPDATE_RANGE(STORE, VALUE, TYPE, AXIS, \
512 OUT_ACTION, UNDEF_ACTION) \
513do { \
514 /* HBB 20000726: new check, to avoid crashes with axis index -1 */ \
515 if (AXIS==-1) \
516 break; \
517 if (axis_array[AXIS].log) { \
518 if (VALUE<0.0) { \
519 TYPE = UNDEFINED; \
520 UNDEF_ACTION; \
521 break; \
522 } else if (VALUE == 0.0) { \
523 STORE = -VERYLARGE; \
524 TYPE = OUTRANGE; \
525 OUT_ACTION; \
526 break; \
527 } else { \
528 STORE = AXIS_DO_LOG(AXIS,VALUE); \
529 } \
530 } else \
531 STORE = VALUE; \
532 if (TYPE != INRANGE) \
533 break; /* don't set y range if x is outrange, for example */ \
534 if ((int)AXIS < 0) \
535 break; /* HBB 20000507: don't check range if not a coordinate */ \
536 if ( VALUE<axis_array[AXIS].min ) { \
537 if (axis_array[AXIS].autoscale & AUTOSCALE_MIN) \
538 axis_array[AXIS].min = VALUE; \
539 else { \
540 TYPE = OUTRANGE; \
541 OUT_ACTION; \
542 break; \
543 } \
544 } \
545 if ( VALUE>axis_array[AXIS].max ) { \
546 if (axis_array[AXIS].autoscale & AUTOSCALE_MAX) \
547 axis_array[AXIS].max = VALUE; \
548 else { \
549 TYPE = OUTRANGE; \
550 OUT_ACTION; \
551 } \
552 } \
553} while(0)
554
555/* use this instead empty macro arguments to work around NeXT cpp bug */
556/* if this fails on any system, we might use ((void)0) */
557#define NOOP /* */
558
559/* HBB 20000506: new macro, initializes one variable to the same
560 * value, for all axes. */
561#define INIT_AXIS_ARRAY(field, value) \
562do { \
563 int tmp; \
564 for (tmp=0; tmp<AXIS_ARRAY_SIZE; tmp++) \
565 axis_array[tmp].field=(value); \
566} while(0)
567
568/* HBB 20000506: new macro to automatically build intializer lists
569 * for arrays of AXIS_ARRAY_SIZE equal elements */
570#ifdef PM3D
571#define AXIS_ARRAY_INITIALIZER(value) { \
572 value, value, value, value, value, \
573 value, value, value, value, value /*, value*/ }
574#else
575#define AXIS_ARRAY_INITIALIZER(value) { \
576 value, value, value, value, value, \
577 value, value, value, value, value }
578#endif
579
580
581/* used by set.c */
582#define SET_DEFFORMAT(axis, flag_array) \
583 if (flag_array[axis]) { \
584 (void) strcpy(axis_array[axis].formatstring,DEF_FORMAT); \
585 axis_array[axis].format_is_numeric = 1; \
586 }
587
588
589/* 'roundoff' check tolerance: less than one hundredth of a tic mark */
590#define SIGNIF (0.01)
591/* (DFK) Watch for cancellation error near zero on axes labels */
592/* FIXME HBB 20000521: these seem not to be used much, anywhere... */
593#define CheckZero(x,tic) (fabs(x) < ((tic) * SIGNIF) ? 0.0 : (x))
594#define NearlyEqual(x,y,tic) (fabs((x)-(y)) < ((tic) * SIGNIF))
595
596
597
598/* ------------ functions exported by axis.c */
599/*t_autoscale load_range __PROTO((AXIS_INDEX, double *, double *, t_autoscale));*/
600void axis_unlog_interval(AXIS_INDEX, double *, double *, TBOOLEAN);
601/*void axis_revert_and_unlog_range __PROTO((AXIS_INDEX));*/
602/*double axis_log_value_checked __PROTO((AXIS_INDEX, double, const char *));*/
603/*void axis_checked_extend_empty_range __PROTO((AXIS_INDEX, const char *mesg));*/
604/*void timetic_format __PROTO((AXIS_INDEX, double, double));*/
605double set_tic(double, int);
606/*void setup_tics __PROTO((AXIS_INDEX, int));*/
607/*void gen_tics __PROTO((AXIS_INDEX, int, tic_callback));*/
608/*void gprintf __PROTO((char *, size_t, char *, double, double));*/
609/*void axis_output_tics __PROTO((AXIS_INDEX, int *, AXIS_INDEX, int, tic_callback));*/
610/*void axis_set_graphical_range __PROTO((AXIS_INDEX, unsigned int lower, unsigned int upper));*/
611/*TBOOLEAN axis_position_zeroaxis __PROTO((AXIS_INDEX));*/
[1838]612/*void axis_draw_2d_zeroaxis __PROTO((AXIS_INDEX, AXIS_INDEX)); */
[1829]613
614/*double get_writeback_min __PROTO((AXIS_INDEX));*/
615/*double get_writeback_max __PROTO((AXIS_INDEX));*/
616/*void set_writeback_min __PROTO((AXIS_INDEX));*/
617/*void set_writeback_max __PROTO((AXIS_INDEX));*/
618
619#endif /* GNUPLOT_AXIS_H */
Note: See TracBrowser for help on using the repository browser.