Peter Speck <speck@vitality.dk> eps/svg/pdf file format code in rrdtool-1.x
David Grimes <dgrimes@navisite.com> SQRT/SORT/REV/SHIFT/TREND
Henrik Storner <henrik@hswn.dk> make rrd_graph() provide the min/max values of data in graph
Peter Speck <speck@vitality.dk> eps/svg/pdf file format code in rrdtool-1.x
David Grimes <dgrimes@navisite.com> SQRT/SORT/REV/SHIFT/TREND
Henrik Storner <henrik@hswn.dk> make rrd_graph() provide the min/max values of data in graph
+ Radoslaw Karas <rkaras@tyndall.ie>
#endif
text_prop_t text_prop[] = {
#endif
text_prop_t text_prop[] = {
- { 10.0, RRD_DEFAULT_FONT }, /* default */
- { 10.0, RRD_DEFAULT_FONT }, /* title */
- { 8.0, RRD_DEFAULT_FONT }, /* axis */
- { 10.0, RRD_DEFAULT_FONT }, /* unit */
- { 10.0, RRD_DEFAULT_FONT } /* legend */
+ { 9.0, RRD_DEFAULT_FONT }, /* default */
+ { 11.0, RRD_DEFAULT_FONT }, /* title */
+ { 8.0, RRD_DEFAULT_FONT }, /* axis */
+ { 9.0, RRD_DEFAULT_FONT }, /* unit */
+ { 9.0, RRD_DEFAULT_FONT } /* legend */
(*prdata)[prlines-2] = malloc((FMT_LEG_LEN+2)*sizeof(char));
(*prdata)[prlines-1] = NULL;
if (bad_format(im->gdes[i].format)) {
(*prdata)[prlines-2] = malloc((FMT_LEG_LEN+2)*sizeof(char));
(*prdata)[prlines-1] = NULL;
if (bad_format(im->gdes[i].format)) {
- rrd_set_error("bad format for [G]PRINT in '%s'", im->gdes[i].format);
+ rrd_set_error("bad format for PRINT in '%s'", im->gdes[i].format);
return -1;
}
#ifdef HAVE_SNPRINTF
return -1;
}
#ifdef HAVE_SNPRINTF
/* GF_GPRINT */
if (bad_format(im->gdes[i].format)) {
/* GF_GPRINT */
if (bad_format(im->gdes[i].format)) {
- rrd_set_error("bad format for [G]PRINT in '%s'", im->gdes[i].format);
+ rrd_set_error("bad format for GPRINT in '%s'", im->gdes[i].format);
return -1;
}
#ifdef HAVE_SNPRINTF
return -1;
}
#ifdef HAVE_SNPRINTF
for(ii=mark;ii<=i;ii++){
if(im->gdes[ii].legend[0]=='\0')
for(ii=mark;ii<=i;ii++){
if(im->gdes[ii].legend[0]=='\0')
+ continue; /* skip empty legends */
im->gdes[ii].leg_x = leg_x;
im->gdes[ii].leg_y = leg_y;
leg_x +=
im->gdes[ii].leg_x = leg_x;
im->gdes[ii].leg_y = leg_y;
leg_x +=
- /* yaxis description */
+ /* yaxis unit description */
gfx_new_text( im->canvas,
7, (im->yorigin - im->ysize/2),
im->graph_col[GRC_FONT],
gfx_new_text( im->canvas,
7, (im->yorigin - im->ysize/2),
im->graph_col[GRC_FONT],
- im->text_prop[TEXT_PROP_AXIS].font,
- im->text_prop[TEXT_PROP_AXIS].size, im->tabwidth,
+ im->text_prop[TEXT_PROP_UNIT].font,
+ im->text_prop[TEXT_PROP_UNIT].size, im->tabwidth,
RRDGRAPH_YLEGEND_ANGLE,
GFX_H_LEFT, GFX_V_CENTER,
im->ylegend);
/* graph title */
gfx_new_text( im->canvas,
RRDGRAPH_YLEGEND_ANGLE,
GFX_H_LEFT, GFX_V_CENTER,
im->ylegend);
/* graph title */
gfx_new_text( im->canvas,
- im->ximg/2, im->text_prop[TEXT_PROP_TITLE].size,
+ im->ximg/2, im->text_prop[TEXT_PROP_TITLE].size*1.2,
im->graph_col[GRC_FONT],
im->text_prop[TEXT_PROP_TITLE].font,
im->text_prop[TEXT_PROP_TITLE].size, im->tabwidth, 0.0,
im->graph_col[GRC_FONT],
im->text_prop[TEXT_PROP_TITLE].font,
im->text_prop[TEXT_PROP_TITLE].size, im->tabwidth, 0.0,
im->gdes[i].legend );
/* The legend for GRAPH items starts with "M " to have
enough space for the box */
im->gdes[i].legend );
/* The legend for GRAPH items starts with "M " to have
enough space for the box */
- if ( im->gdes[i].gf != GF_GPRINT
- && im->gdes[i].gf != GF_COMMENT) {
+ if ( im->gdes[i].gf != GF_PRINT &&
+ im->gdes[i].gf != GF_GPRINT &&
+ im->gdes[i].gf != GF_COMMENT) {
int boxH, boxV;
boxH = gfx_get_text_width(im->canvas, 0,
im->text_prop[TEXT_PROP_LEGEND].font,
im->text_prop[TEXT_PROP_LEGEND].size,
int boxH, boxV;
boxH = gfx_get_text_width(im->canvas, 0,
im->text_prop[TEXT_PROP_LEGEND].font,
im->text_prop[TEXT_PROP_LEGEND].size,
+ im->tabwidth,"M", 0)*1.2;
boxV = boxH;
node = gfx_new_area(im->canvas,
boxV = boxH;
node = gfx_new_area(im->canvas,
Yspacing =0;
} else {
if (im->ylegend[0] != '\0') {
Yspacing =0;
} else {
if (im->ylegend[0] != '\0') {
- Xvertical = im->text_prop[TEXT_PROP_LEGEND].size *2;
- Yvertical = im->text_prop[TEXT_PROP_LEGEND].size * (strlen(im->ylegend)+1);
+ Xvertical = im->text_prop[TEXT_PROP_UNIT].size *2;
+ Yvertical = gfx_get_text_width(im->canvas, 0,
+ im->text_prop[TEXT_PROP_UNIT].font,
+ im->text_prop[TEXT_PROP_UNIT].size,
+ im->tabwidth,im->ylegend, 0);
im->text_prop[TEXT_PROP_TITLE].size,
im->tabwidth,
im->title, 0) + 2*Xspacing;
im->text_prop[TEXT_PROP_TITLE].size,
im->tabwidth,
im->title, 0) + 2*Xspacing;
- Ytitle = im->text_prop[TEXT_PROP_TITLE].size*2;
+ Ytitle = im->text_prop[TEXT_PROP_TITLE].size*2.5;
Ymain=im->ysize;
if (im->draw_x_grid) {
Xxlabel=Xmain;
Ymain=im->ysize;
if (im->draw_x_grid) {
Xxlabel=Xmain;
- Yxlabel=im->text_prop[TEXT_PROP_LEGEND].size *2;
+ Yxlabel=im->text_prop[TEXT_PROP_AXIS].size *2.5;
- Xylabel=im->text_prop[TEXT_PROP_LEGEND].size *6;
+ Xylabel=im->text_prop[TEXT_PROP_AXIS].size *6;
im->gdes[im->gdes_c-1].shift=0;
im->gdes[im->gdes_c-1].col = 0x0;
im->gdes[im->gdes_c-1].legend[0]='\0';
im->gdes[im->gdes_c-1].shift=0;
im->gdes[im->gdes_c-1].col = 0x0;
im->gdes[im->gdes_c-1].legend[0]='\0';
+ im->gdes[im->gdes_c-1].format[0]='\0';
im->gdes[im->gdes_c-1].rrd[0]='\0';
im->gdes[im->gdes_c-1].ds=-1;
im->gdes[im->gdes_c-1].p_data=NULL;
im->gdes[im->gdes_c-1].rrd[0]='\0';
im->gdes[im->gdes_c-1].ds=-1;
im->gdes[im->gdes_c-1].p_data=NULL;
strcpy(rrd_win_default_font,windir);
strcat(rrd_win_default_font,"\\fonts\\cour.ttf");
for(i=0;i<DIM(text_prop);i++)
strcpy(rrd_win_default_font,windir);
strcat(rrd_win_default_font,"\\fonts\\cour.ttf");
for(i=0;i<DIM(text_prop);i++)
- text_prop[i].font = rrd_win_default_font;
+ strcpy(text_prop[i].font,rrd_win_default_font);
}
}
#endif
for(i=0;i<DIM(text_prop);i++){
im->text_prop[i].size = text_prop[i].size;
}
}
#endif
for(i=0;i<DIM(text_prop);i++){
im->text_prop[i].size = text_prop[i].size;
- im->text_prop[i].font = text_prop[i].font;
+ strcpy(im->text_prop[i].font,text_prop[i].font);
- /* originally this used char *prop = "" and
- ** char *font = "dummy" however this results
- ** in a SEG fault, at least on RH7.1
- **
- ** The current implementation isn't proper
- ** either, font is never freed and prop uses
- ** a fixed width string
- */
- char prop[100];
if(sscanf(optarg,
"%10[A-Z]:%lf:%s",
prop,&size,font) == 3){
int sindex;
if((sindex=text_prop_conv(prop)) != -1){
im->text_prop[sindex].size=size;
if(sscanf(optarg,
"%10[A-Z]:%lf:%s",
prop,&size,font) == 3){
int sindex;
if((sindex=text_prop_conv(prop)) != -1){
im->text_prop[sindex].size=size;
- im->text_prop[sindex].font=font;
+ strcpy(im->text_prop[sindex].font,font);
if (sindex==0) { /* the default */
im->text_prop[TEXT_PROP_TITLE].size=size;
if (sindex==0) { /* the default */
im->text_prop[TEXT_PROP_TITLE].size=size;
- im->text_prop[TEXT_PROP_TITLE].font=font;
+ strcpy(im->text_prop[TEXT_PROP_TITLE].font,font);
im->text_prop[TEXT_PROP_AXIS].size=size;
im->text_prop[TEXT_PROP_AXIS].size=size;
- im->text_prop[TEXT_PROP_AXIS].font=font;
+ strcpy(im->text_prop[TEXT_PROP_AXIS].font,font);
im->text_prop[TEXT_PROP_UNIT].size=size;
im->text_prop[TEXT_PROP_UNIT].size=size;
- im->text_prop[TEXT_PROP_UNIT].font=font;
+ strcpy(im->text_prop[TEXT_PROP_UNIT].font,font);
im->text_prop[TEXT_PROP_LEGEND].size=size;
im->text_prop[TEXT_PROP_LEGEND].size=size;
- im->text_prop[TEXT_PROP_LEGEND].font=font;
+ strcpy(im->text_prop[TEXT_PROP_LEGEND].font,font);
}
} else {
rrd_set_error("invalid fonttag '%s'",prop);
}
} else {
rrd_set_error("invalid fonttag '%s'",prop);
-int
-rrd_graph_legend(graph_desc_t *gdp, char *line)
-{
- int i;
-
- i=scan_for_col(line,FMT_LEG_LEN,gdp->legend);
-
- return (strlen(&line[i])==0);
-}
int bad_format(char *fmt) {
int bad_format(char *fmt) {
typedef struct text_prop_t {
double size;
typedef struct text_prop_t {
double size;
int debug; /* boolean */
char vname[MAX_VNAME_LEN+1]; /* name of the variable */
long vidx; /* gdes reference */
int debug; /* boolean */
char vname[MAX_VNAME_LEN+1]; /* name of the variable */
long vidx; /* gdes reference */
- char rrd[255]; /* name of the rrd_file containing data */
+ char rrd[1024]; /* name of the rrd_file containing data */
char ds_nam[DS_NAM_SIZE]; /* data source name */
long ds; /* data source number */
enum cf_en cf; /* consolidation function */
char ds_nam[DS_NAM_SIZE]; /* data source name */
long ds; /* data source number */
enum cf_en cf; /* consolidation function */
void rrd_graph_script(int, char **, image_desc_t *, int);
int rrd_graph_check_vname(image_desc_t *, char *, char *);
int rrd_graph_color(image_desc_t *, char *, char *, int);
void rrd_graph_script(int, char **, image_desc_t *, int);
int rrd_graph_check_vname(image_desc_t *, char *, char *);
int rrd_graph_color(image_desc_t *, char *, char *, int);
-int rrd_graph_legend(graph_desc_t *, char *);
int bad_format(char *);
int vdef_parse(struct graph_desc_t *,char *);
int vdef_calc(image_desc_t *, int);
int bad_format(char *);
int vdef_parse(struct graph_desc_t *,char *);
int vdef_calc(image_desc_t *, int);