/****************************************************************************
- * RRDtool 1.3rc7 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
****************************************************************************
* rrd__graph.c produce graphs from data in rrdfiles
****************************************************************************/
}
if (im->gdes[i].gf == GF_PRINT) {
- infoval prline;
+ rrd_infoval_t prline;
if (im->gdes[i].strftm) {
prline.u_str = malloc((FMT_LEG_LEN + 2) * sizeof(char));
int lazy = lazy_check(im);
double areazero = 0.0;
graph_desc_t *lastgdes = NULL;
- infoval info;
+ rrd_infoval_t info;
PangoFontMap *font_map = pango_cairo_font_map_get_default();
- /* if we are lazy and there is nothing to PRINT ... quit now */
- if (lazy && im->prt_c == 0)
+ /* if we want and can be lazy ... quit now */
+ if (lazy) {
+ info.u_cnt = im->ximg;
+ grinfo_push(im, sprintf_alloc("image_width"), RD_I_CNT, info);
+ info.u_cnt = im->yimg;
+ grinfo_push(im, sprintf_alloc("image_height"), RD_I_CNT, info);
return 0;
+ }
/* pull the data from the rrd files ... */
if (data_fetch(im) == -1)
return -1;
return -1;
/* calculate and PRINT and GPRINT definitions. We have to do it at
* this point because it will affect the length of the legends
- * if there are no graph elements we stop here ...
+ * if there are no graph elements (i==0) we stop here ...
* if we are lazy, try to quit ...
*/
i = print_calc(im);
if (i < 0)
return -1;
+
if ((i == 0) || lazy)
return 0;
+
/**************************************************************
*** Calculating sizes and locations became a bit confusing ***
*** so I moved this into a separate function. ***
(im->surface, CAIRO_SVG_VERSION_1_1);
break;
};
+ cairo_destroy(im->cr);
im->cr = cairo_create(im->surface);
cairo_set_antialias(im->cr, im->graph_antialias);
cairo_scale(im->cr, im->zoom, im->zoom);
double *ymax)
{
int prlines = 0;
- info_t *grinfo = NULL;
- info_t *walker;
+ rrd_info_t *grinfo = NULL;
+ rrd_info_t *walker;
grinfo = rrd_graph_v(argc, argv);
if (grinfo == NULL)
walker = walker->next;
}
walker = grinfo;
+ *xsize = 0;
+ *ysize = 0;
+ *ymin = 0;
+ *ymax = 0;
while (walker) {
if (strcmp(walker->key, "image_width") == 0) {
*xsize = walker->value.u_int;
/* skip anything else */
walker = walker->next;
}
- info_free(grinfo);
+ rrd_info_free(grinfo);
return 0;
}
** - options parsing now in rrd_graph_options()
** - script parsing now in rrd_graph_script()
*/
-info_t *rrd_graph_v(
+rrd_info_t *rrd_graph_v(
int argc,
char **argv)
{
image_desc_t im;
- info_t *grinfo;
+ rrd_info_t *grinfo;
rrd_graph_init(&im);
/* a dummy surface so that we can measure text sizes for placements */
im.cr = cairo_create(im.surface);
rrd_graph_options(argc, argv, &im);
if (rrd_test_error()) {
- info_free(im.grinfo);
+ rrd_info_free(im.grinfo);
im_free(&im);
return NULL;
}
if (optind >= argc) {
- info_free(im.grinfo);
+ rrd_info_free(im.grinfo);
im_free(&im);
rrd_set_error("missing filename");
return NULL;
if (strlen(argv[optind]) >= MAXPATH) {
rrd_set_error("filename (including path) too long");
- info_free(im.grinfo);
+ rrd_info_free(im.grinfo);
im_free(&im);
return NULL;
}
rrd_graph_script(argc, argv, &im, 1);
if (rrd_test_error()) {
- info_free(im.grinfo);
+ rrd_info_free(im.grinfo);
im_free(&im);
return NULL;
}
/* Everything is now read and the actual work can start */
if (graph_paint(&im) == -1) {
- info_free(im.grinfo);
+ rrd_info_free(im.grinfo);
im_free(&im);
return NULL;
}
*/
if (im.imginfo) {
- infoval info;
+ rrd_infoval_t info;
+ char *filename;
+ filename = im.graphfile + strlen(im.graphfile);
+ while (filename > im.graphfile) {
+ if (*(filename - 1) == '/' || *(filename - 1) == '\\')
+ break;
+ filename--;
+ }
info.u_str =
sprintf_alloc(im.imginfo,
- im.graphfile,
+ filename,
(long) (im.zoom *
im.ximg), (long) (im.zoom * im.yimg));
grinfo_push(&im, sprintf_alloc("image_info"), RD_I_STR, info);
free(info.u_str);
}
if (im.rendered_image) {
- infoval img;
+ rrd_infoval_t img;
img.u_blo.size = im.rendered_image_size;
img.u_blo.ptr = im.rendered_image;
im->grid_dash_off = 1;
im->grid_dash_on = 1;
im->gridfit = 1;
- im->grinfo = (info_t *) NULL;
- im->grinfo_current = (info_t *) NULL;
+ im->grinfo = (rrd_info_t *) NULL;
+ im->grinfo_current = (rrd_info_t *) NULL;
im->imgformat = IF_PNG;
im->imginfo = NULL;
im->lazy = 0;
cairo_font_options_set_antialias(im->font_options, CAIRO_ANTIALIAS_GRAY);
for (i = 0; i < DIM(graph_col); i++)
im->graph_col[i] = graph_col[i];
-#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__)
- {
- char *windir;
- char rrd_win_default_font[1000];
-
- windir = getenv("windir");
- /* %windir% is something like D:\windows or C:\winnt */
- if (windir != NULL) {
- strncpy(rrd_win_default_font, windir, 500);
- rrd_win_default_font[500] = '\0';
- strcat(rrd_win_default_font, "\\fonts\\");
- strcat(rrd_win_default_font, RRD_DEFAULT_FONT);
- for (i = 0; i < DIM(text_prop); i++) {
- strncpy(text_prop[i].font,
- rrd_win_default_font, sizeof(text_prop[i].font) - 1);
- text_prop[i].font[sizeof(text_prop[i].font) - 1] = '\0';
- }
- }
- }
-#endif
{
char *deffont;
char scan_gtm[12], scan_mtm[12], scan_ltm[12], col_nam[12];
time_t start_tmp = 0, end_tmp = 0;
long long_tmp;
- struct rrd_time_value start_tv, end_tv;
+ rrd_time_value_t start_tv, end_tv;
long unsigned int color;
char *old_locale = "";
optind = 0;
opterr = 0; /* initialize getopt */
- parsetime("end-24h", &start_tv);
- parsetime("now", &end_tv);
+ rrd_parsetime("end-24h", &start_tv);
+ rrd_parsetime("now", &end_tv);
while (1) {
int option_index = 0;
int opt;
int col_start, col_end;
opt = getopt_long(argc, argv,
- "s:e:x:y:v:w:h:D:iu:l:rb:oc:n:m:t:f:a:I:zgjFYAMEX:L:S:T:NR:B:W:k",
+ "s:e:x:y:v:w:h:D:iu:l:rb:oc:n:m:t:f:a:I:zgjFYAMEX:L:S:T:NR:B:W:kP",
long_options, &option_index);
if (opt == EOF)
break;
im->with_markup = 1;
break;
case 's':
- if ((parsetime_error = parsetime(optarg, &start_tv))) {
+ if ((parsetime_error = rrd_parsetime(optarg, &start_tv))) {
rrd_set_error("start time: %s", parsetime_error);
return;
}
break;
case 'e':
- if ((parsetime_error = parsetime(optarg, &end_tv))) {
+ if ((parsetime_error = rrd_parsetime(optarg, &end_tv))) {
rrd_set_error("end time: %s", parsetime_error);
return;
}
return;
}
- if (proc_start_end(&start_tv, &end_tv, &start_tmp, &end_tmp) == -1) {
- /* error string is set in parsetime.c */
+ if (rrd_proc_start_end(&start_tv, &end_tv, &start_tmp, &end_tmp) == -1) {
+ /* error string is set in rrd_parsetime.c */
return;
}
src = &im->gdes[dst->vidx];
data = src->data + src->ds;
end =
- src->end_orig % src->step ==
- 0 ? src->end_orig : (src->end_orig + src->step -
- src->end_orig % src->step);
+ src->end_orig % (long) src->step ==
+ 0 ? src->end_orig : (src->end_orig + (long) src->step -
+ src->end_orig % (long) src->step);
steps = (end - src->start) / src->step;
#if 0
void grinfo_push(
image_desc_t *im,
char *key,
- enum info_type type,
- infoval value)
+ rrd_info_type_t type,
+ rrd_infoval_t value)
{
- im->grinfo_current = info_push(im->grinfo_current, key, type, value);
+ im->grinfo_current = rrd_info_push(im->grinfo_current, key, type, value);
if (im->grinfo == NULL) {
im->grinfo = im->grinfo_current;
}