/****************************************************************************
- * RRDtool 1.2rc2 Copyright by Tobi Oetiker, 1997-2005
+ * RRDtool 1.2rc4 Copyright by Tobi Oetiker, 1997-2005
****************************************************************************
* rrd__graph.c produce graphs from data in rrdfiles
****************************************************************************/
#include "rrd_tool.h"
-#ifdef WIN32
+#if defined(WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__)
#include <io.h>
#include <fcntl.h>
#endif
/* some constant definitions */
-#ifdef WIN32
-char rrd_win_default_font[80];
-#endif
#ifndef RRD_DEFAULT_FONT
/* there is special code later to pick Cour.ttf when running on windows */
}
/* paint the labels below the graph */
- for(ti = find_first_time(im->start,
+ for(ti = find_first_time(im->start - im->xlab_user.precis/2,
im->xlab_user.labtm,
im->xlab_user.labst);
- ti <= im->end;
+ ti <= im->end - im->xlab_user.precis/2;
ti = find_next_time(ti,im->xlab_user.labtm,im->xlab_user.labst)
){
tilab= ti + im->xlab_user.precis/2; /* correct time for the label */
/* are we inside the graph ? */
- if (ti < im->start || ti > im->end) continue;
+ if (tilab < im->start || tilab > im->end) continue;
#if HAVE_STRFTIME
localtime_r(&tilab, &tm);
im->tabwidth,"M", 0)*1.2;
boxV = boxH;
+ /* make sure transparent colors show up all the same */
+ node = gfx_new_area(im->canvas,
+ X0,Y0-boxV,
+ X0,Y0,
+ X0+boxH,Y0,
+ im->graph_col[GRC_CANVAS]);
+ gfx_add_point ( node, X0+boxH, Y0-boxV );
+
node = gfx_new_area(im->canvas,
X0,Y0-boxV,
X0,Y0,
gfx_add_point ( node, X0+boxH, Y0-boxV );
node = gfx_new_line(im->canvas,
X0,Y0-boxV, X0,Y0,
- 1,0x000000FF);
+ 1,im->graph_col[GRC_FONT]);
gfx_add_point(node,X0+boxH,Y0);
gfx_add_point(node,X0+boxH,Y0-boxV);
gfx_close_path(node);
Xtitle =0, Ytitle =0,
Xylabel =0, Yylabel =0,
Xmain =0, Ymain =0,
+#ifdef WITH_PIECHART
Xpie =0, Ypie =0,
+#endif
Xxlabel =0, Yxlabel =0,
#if 0
Xlegend =0, Ylegend =0,
Xspacing =10, Yspacing =10;
if (im->extra_flags & ONLY_GRAPH) {
- Xspacing =0;
- Yspacing =0;
- } else {
- if (im->ylegend[0] != '\0') {
+ im->xorigin =0;
+ im->ximg = im->xsize;
+ im->yimg = im->ysize;
+ im->yorigin = im->ysize;
+ return 0;
+ }
+
+ if (im->ylegend[0] != '\0' ) {
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);
- }
}
+
if (im->title[0] != '\0') {
/* The title is placed "inbetween" two text lines so it
** automatically has some vertical spacing. The horizontal
** forget about it at all; the legend will have to fit in the
** size already allocated.
*/
- im->ximg = Xmain;
+ im->ximg = Xylabel + Xmain + 2 * Xspacing;
- if ( !(im->extra_flags & ONLY_GRAPH) ) {
- im->ximg = Xylabel + Xmain + Xpie + 2 * Xspacing;
- }
+#ifdef WITH_PIECHART
+ im->ximg += Xpie;
+#endif
if (Xmain) im->ximg += Xspacing;
+#ifdef WITH_PIECHART
if (Xpie) im->ximg += Xspacing;
+#endif
- if (im->extra_flags & ONLY_GRAPH) {
- im->xorigin = 0;
- } else {
- im->xorigin = Xspacing + Xylabel;
- }
+ im->xorigin = Xspacing + Xylabel;
if (Xtitle > im->ximg) im->ximg = Xtitle;
- if (Xvertical) {
+
+ if (Xvertical) { /* unit description */
im->ximg += Xvertical;
im->xorigin += Xvertical;
}
/* reserve space for main and/or pie */
- if (im->extra_flags & ONLY_GRAPH) {
- im->yimg = Ymain;
- } else {
- im->yimg = Ymain + Yxlabel;
- }
+ im->yimg = Ymain + Yxlabel;
+#ifdef WITH_PIECHART
if (im->yimg < Ypie) im->yimg = Ypie;
+#endif
- if (im->extra_flags & ONLY_GRAPH) {
- im->yorigin = im->yimg;
- } else {
- im->yorigin = im->yimg - Yxlabel;
- }
+ im->yorigin = im->yimg - Yxlabel;
/* reserve space for the title *or* some padding above the graph */
if (Ytitle) {
if (strcmp(im->graphfile,"-")==0) {
fo = im->graphhandle ? im->graphhandle : stdout;
-#ifdef WIN32
+#if defined(WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__)
/* Change translation mode for stdout to BINARY */
_setmode( _fileno( fo ), O_BINARY );
#endif
for(i=0;i<DIM(graph_col);i++)
im->graph_col[i]=graph_col[i];
-#ifdef WIN32
+
+#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) {
- strcpy(rrd_win_default_font,windir);
+ strncpy(rrd_win_default_font,windir,999);
+ rrd_win_default_font[999] = '\0';
strcat(rrd_win_default_font,"\\fonts\\cour.ttf");
- for(i=0;i<DIM(text_prop);i++)
- strcpy(text_prop[i].font,rrd_win_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;
+ deffont = getenv("RRD_DEFAULT_FONT");
+ /* %windir% is something like D:\windows or C:\winnt */
+ if (deffont != NULL) {
+ for(i=0;i<DIM(text_prop);i++){
+ strncpy(text_prop[i].font,deffont,sizeof(text_prop[i].font)-1);
+ text_prop[i].font[sizeof(text_prop[i].font)-1] = '\0';
+ }
+ }
+ }
for(i=0;i<DIM(text_prop);i++){
im->text_prop[i].size = text_prop[i].size;
strcpy(im->text_prop[i].font,text_prop[i].font);
&im->xlab_user.precis,
&stroff) == 7 && stroff != 0){
strncpy(im->xlab_form, optarg+stroff, sizeof(im->xlab_form) - 1);
+ im->xlab_form[sizeof(im->xlab_form)-1] = '\0';
if((int)(im->xlab_user.gridtm = tmt_conv(scan_gtm)) == -1){
rrd_set_error("unknown keyword %s",scan_gtm);
return;