/* this may configure __EXTENSIONS__ without which pango will fail to compile
so load this early */
+#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__)
+#include "../win32/config.h"
+#else
+#ifdef HAVE_CONFIG_H
#include "../rrd_config.h"
+#endif
+#endif
#include <cairo.h>
#include <cairo-pdf.h>
enum gf_en { GF_PRINT = 0, GF_GPRINT, GF_COMMENT, GF_HRULE, GF_VRULE, GF_LINE,
GF_AREA,GF_GRAD, GF_STACK, GF_TICK, GF_TEXTALIGN,
GF_DEF, GF_CDEF, GF_VDEF, GF_SHIFT,
- GF_XPORT
+ GF_XPORT, GF_XAXIS, GF_YAXIS
};
enum txa_en { TXA_LEFT = 0, TXA_RIGHT, TXA_CENTER, TXA_JUSTIFIED };
enum legend_pos{ NORTH = 0, WEST, SOUTH, EAST };
enum legend_direction { TOP_DOWN = 0, BOTTOM_UP };
-enum gfx_if_en { IF_PNG = 0, IF_SVG, IF_EPS, IF_PDF };
+enum gfx_if_en { IF_PNG = 0, IF_SVG, IF_EPS, IF_PDF,
+ IF_XML=128, IF_CSV=129, IF_TSV=130, IF_SSV=131, IF_JSON=132,
+ IF_XMLENUM=133, IF_JSONTIME=134
+};
enum gfx_en { GFX_LINE = 0, GFX_AREA, GFX_TEXT };
enum gfx_h_align_en { GFX_H_NULL = 0, GFX_H_LEFT, GFX_H_RIGHT, GFX_H_CENTER };
enum gfx_v_align_en { GFX_V_NULL = 0, GFX_V_TOP, GFX_V_BOTTOM, GFX_V_CENTER };
+enum gfx_type_en {GTYPE_TIME=0,GTYPE_XY=1};
+
/* cairo color components */
typedef struct gfx_color_t {
double red;
double alpha;
} gfx_color_t;
+typedef struct keyvalue_t {
+ char* key;
+ char* value;
+ int pos;
+ int flag;
+} keyvalue_t;
+
+typedef struct keyint_t {
+ char*key;
+ int value;
+} keyint_t;
+
+typedef struct parsedargs_t {
+ char *arg; /* copy of the parsed string - rewritten*/
+ const char *arg_orig; /* original argument */
+ int kv_cnt; /* number of key/value arguments */
+ keyvalue_t *kv_args; /* key value arguments */
+} parsedargs_t;
+void initParsedArguments(parsedargs_t*);
+void freeParsedArguments(parsedargs_t*);
+int addToArguments(parsedargs_t*, char*, char*, int);
+int parseArguments(const char*, parsedargs_t*);
+void dumpKeyValue(char* ,keyvalue_t*);
+void dumpArguments(parsedargs_t*);
+char* getKeyValueArgument(const char*, int, parsedargs_t*);
+int getMappedKeyValueArgument(const char*,int, parsedargs_t*,
+ int*,keyint_t**);
+int getLong(const char*,long *,char**,int);
+int getDouble(const char*,double *,char**);
+keyvalue_t* getFirstUnusedArgument(int, parsedargs_t*);
+char* checkUnusedValues(parsedargs_t*);
typedef struct text_prop_t {
double size;
#define FMT_LEG_LEN 2000
#endif
+# define MAX_AXIS 4
+
typedef struct graph_desc_t {
enum gf_en gf; /* graphing function */
int stack; /* boolean */
time_t xrule; /* time for x rule line and for VDEF */
vdef_t vf; /* instruction for VDEF function */
rpnp_t *rpnp; /* instructions for CDEF function */
+ char *rpn; /* string representation of rpn */
/* SHIFT implementation */
int shidx; /* gdes reference for offset (-1 --> constant) */
double offset; /* dash offset along the line */
enum txa_en txtalign; /* change default alignment strategy for text */
+
+ /* the axis to use for this graph in x and y*/
+ int xaxisidx;
+ int yaxisidx;
} graph_desc_t;
typedef struct image_desc_t {
/* configuration of graph */
-
char graphfile[MAXPATH]; /* filename for graphic */
+ enum gfx_type_en graph_type; /* type of the graph */
long xsize, ysize; /* graph area size in pixels */
struct gfx_color_t graph_col[__GRC_END__]; /* real colors for the graph */
text_prop_t text_prop[TEXT_PROP_LAST]; /* text properties */
char *);
enum gfx_if_en if_conv(
char *);
+enum gfx_type_en type_conv(
+ char *);
enum tmt_en tmt_conv(
char *);
enum grc_en grc_conv(
image_desc_t *);
int graph_paint(
image_desc_t *);
+int graph_paint_timestring(
+ image_desc_t *,int,int);
+int graph_paint_xy(
+ image_desc_t *,int,int);
+int rrd_graph_xport(
+ image_desc_t *);
+
+int graph_cairo_setup(
+ image_desc_t *);
+int graph_cairo_finish(
+ image_desc_t *);
int gdes_alloc(
image_desc_t *);