/*
 * $Id: graphics.h,v 1.21 2002/07/23 18:53:12 mikulik Exp $
 */

/* GNUPLOT - graphics.h */

/*[
 * Copyright 1999
 *
 * Permission to use, copy, and distribute this software and its
 * documentation for any purpose with or without fee is hereby granted,
 * provided that the above copyright notice appear in all copies and
 * that both that copyright notice and this permission notice appear
 * in supporting documentation.
 *
 * Permission to modify the software is granted, but not the right to
 * distribute the complete modified source code.  Modifications are to
 * be distributed as patches to the released version.  Permission to
 * distribute binaries produced by compiling modified sources is granted,
 * provided you
 *   1. distribute the corresponding source modifications from the
 *    released version in the form of a patch file along with the binaries,
 *   2. add special version identification to distinguish your version
 *    in addition to the base release version number,
 *   3. provide your name and address as the primary contact for the
 *    support of your modified version, and
 *   4. retain our contact information in regard to use of the base
 *    software.
 * Permission to distribute the released version of the source code along
 * with corresponding source modifications in the form of a patch file is
 * granted with same provisions 2 through 4 for binary distributions.
 *
 * This software is provided "as is" without express or implied warranty
 * to the extent permitted by applicable law.
]*/

#ifndef GNUPLOT_GRAPHICS_H
# define GNUPLOT_GRAPHICS_H

#include "syscfg.h"
#include "gp_types.h"

#include "gadgets.h"
#include "term_api.h"

/* types defined for 2D plotting */

typedef struct curve_points {
    struct curve_points *next;	/* pointer to next plot in linked list */
    int token;			/* last token nr., for second pass */
    enum PLOT_TYPE plot_type;	/* data, function? 3D? */
    enum PLOT_STYLE plot_style;	/* which "with" option in use? */
    enum PLOT_SMOOTH plot_smooth; /* which "smooth" method to be used? */
    char *title;		/* plot title, a.k.a. key entry */
    int title_no_enhanced;	/* don't typeset title in enhanced mode */
    struct lp_style_type lp_properties;
    int p_max;			/* how many points are allocated */
    int p_count;		/* count of points in points */
    int x_axis;			/* FIRST_X_AXIS or SECOND_X_AXIS */
    int y_axis;			/* FIRST_Y_AXIS or SECOND_Y_AXIS */
    /* HBB 20000504: new field */
    int z_axis;			/* same as either x_axis or y_axis, for 5-column plot types */
    /* pm 5.1.2002: new field */
#ifdef PM3D
    filledcurves_opts filledcurves_options;
#endif
    struct coordinate GPHUGE *points;
} curve_points;

/* From ESR's "Actual code patch" :) */
/* An exclusion box.  
 * Right now, the only exclusion region is the key box, but that will
 * change when we support boxed labels.
 */
struct clipbox {
    int xl;
    int xr;
    int yt;
    int yb;
};

/* externally visible variables of graphics.h */

/* 'set offset' status variables */
extern double loff, roff, toff, boff;

/* 'set bar' status */
extern double bar_size;

/* function prototypes */

void get_offsets __PROTO((struct text_label* this_label,
	struct termentry* t, int* htic, int* vtic));
void do_plot __PROTO((struct curve_points *, int));
int label_width __PROTO((const char *, int *));
void map_position __PROTO((struct position * pos, unsigned int *x,
				  unsigned int *y, const char *what));
#if defined(sun386) || defined(AMIGA_SC_6_1)
double CheckLog __PROTO((TBOOLEAN, double, double));
#endif

void apply_head_properties __PROTO((struct position* headsize, TBOOLEAN filled));

#endif /* GNUPLOT_GRAPHICS_H */
