** into one interval for the destination.
*/
- for (dst_row=0;row_cnt>=reduce_factor;dst_row++) {
+ for (dst_row=0;(long int)row_cnt>=reduce_factor;dst_row++) {
for (col=0;col<(*ds_cnt);col++) {
rrd_value_t newval=DNAN;
unsigned long validval=0;
int
data_fetch(image_desc_t *im )
{
- unsigned int i,ii;
+ int i,ii;
int skip;
/* pull the data from the log files ... */
- for (i=0;i<im->gdes_c;i++){
+ for (i=0;i< (int)im->gdes_c;i++){
/* only GF_DEF elements fetch data */
if (im->gdes[i].gf != GF_DEF)
continue;
}
}
- /* lets see if the required data source is realy there */
- for(ii=0;ii<im->gdes[i].ds_cnt;ii++){
+ /* lets see if the required data source is really there */
+ for(ii=0;ii<(int)im->gdes[i].ds_cnt;ii++){
if(strcmp(im->gdes[i].ds_namv[ii],im->gdes[i].ds_nam) == 0){
im->gdes[i].ds=ii; }
}
** the time of the graph. Beware.
*/
vidx = im->gdes[ii].vidx;
- if ( (gr_time >= im->gdes[vidx].start) &&
- (gr_time <= im->gdes[vidx].end) ) {
+ if ( ((long int)gr_time >= (long int)im->gdes[vidx].start) &&
+ ((long int)gr_time <= (long int)im->gdes[vidx].end) ) {
value = im->gdes[vidx].data[
(unsigned long) floor(
(double)(gr_time - im->gdes[vidx].start)
else
im->maxval = maxval;
}
+ /* make sure min is smaller than max */
+ if (im->minval > im->maxval) {
+ im->minval = 0.99 * im->maxval;
+ }
+
/* make sure min and max are not equal */
if (im->minval == im->maxval) {
im->maxval *= 1.01;
char prt_fctn; /*special printfunctions */
int *legspace;
- if( !(im->extra_flags & NOLEGEND) ) {
+ if( !(im->extra_flags & NOLEGEND) & !(im->extra_flags & ONLY_GRAPH) ) {
if ((legspace = malloc(im->gdes_c*sizeof(int)))==NULL){
rrd_set_error("malloc for legspace");
return -1;
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, 270.0,
+ im->text_prop[TEXT_PROP_AXIS].size, im->tabwidth,
+ RRDGRAPH_YLEGEND_ANGLE,
GFX_H_LEFT, GFX_V_CENTER,
im->ylegend);
} else {
/* horrible hack until we can actually print vertically */
{
int n;
- int l=strlen(im->ylegend);
char s[2];
- for (n=0;n<strlen(im->ylegend);n++) {
+ for (n=0;n< (int)strlen(im->ylegend);n++) {
s[0]=im->ylegend[n];
s[1]='\0';
gfx_new_text(im->canvas,7,im->text_prop[TEXT_PROP_AXIS].size*(n+1),
im->title);
/* graph labels */
- if( !(im->extra_flags & NOLEGEND) ) {
+ if( !(im->extra_flags & NOLEGEND) & !(im->extra_flags & ONLY_GRAPH) ) {
for(i=0;i<im->gdes_c;i++){
if(im->gdes[i].legend[0] =='\0')
continue;
#if 0
Xlegend =0, Ylegend =0,
#endif
- Xspacing =10, Yspacing =10;
+ Xspacing =10, Yspacing =10;
- 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);
+ if (im->extra_flags & ONLY_GRAPH) {
+ if ( im->ysize > 32 ) {
+ rrd_set_error("height > 32 is not possible with --only-graph option");
+ return -1;
+ }
+ Xspacing =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);
+ }
}
if (im->title[0] != '\0') {
** forget about it at all; the legend will have to fit in the
** size already allocated.
*/
- im->ximg = Xylabel + Xmain + Xpie + Xspacing;
+ im->ximg = Xmain;
+
+ if ( !(im->extra_flags & ONLY_GRAPH) ) {
+ im->ximg = Xylabel + Xmain + Xpie + Xspacing;
+ }
+
if (Xmain) im->ximg += Xspacing;
if (Xpie) im->ximg += Xspacing;
- im->xorigin = Xspacing + Xylabel;
+
+ if (im->extra_flags & ONLY_GRAPH) {
+ im->xorigin = 0;
+ } else {
+ im->xorigin = Xspacing + Xylabel;
+ }
+
if (Xtitle > im->ximg) im->ximg = Xtitle;
if (Xvertical) {
im->ximg += Xvertical;
*/
/* reserve space for main and/or pie */
- im->yimg = Ymain + Yxlabel;
+
+ if (im->extra_flags & ONLY_GRAPH) {
+ im->yimg = Ymain;
+ } else {
+ im->yimg = Ymain + Yxlabel;
+ }
+
if (im->yimg < Ypie) im->yimg = Ypie;
- im->yorigin = im->yimg - Yxlabel;
+
+ if (im->extra_flags & ONLY_GRAPH) {
+ im->yorigin = im->yimg;
+ } else {
+ im->yorigin = im->yimg - Yxlabel;
+ }
+
/* reserve space for the title *or* some padding above the graph */
if (Ytitle) {
im->yimg += Ytitle;
if (!calc_horizontal_grid(im))
return -1;
+
if (im->gridfit)
apply_gridfit(im);
+
/**************************************************************
*** Calculating sizes and locations became a bit confusing ***
*** so I moved this into a separate function. ***
areazero = im->minval;
if (im->maxval < 0.0)
areazero = im->maxval;
-
- axis_paint(im);
+ if( !(im->extra_flags & ONLY_GRAPH) )
+ axis_paint(im);
}
if (piechart) {
im->draw_y_grid=0;
}
/* grid_paint also does the text */
- grid_paint(im);
+ if( !(im->extra_flags & ONLY_GRAPH) )
+ grid_paint(im);
/* the RULES are the last thing to paint ... */
for(i=0;i<im->gdes_c;i++){
if (strcmp(im->graphfile,"-")==0) {
+ fo = im->graphhandle ? im->graphhandle : stdout;
#ifdef WIN32
/* Change translation mode for stdout to BINARY */
- _setmode( _fileno( stdout ), O_BINARY );
+ _setmode( _fileno( fo ), O_BINARY );
#endif
- fo = stdout;
} else {
if ((fo = fopen(im->graphfile,"wb")) == NULL) {
rrd_set_error("Opening '%s' for write: %s",im->graphfile,
** - script parsing now in rrd_graph_script()
*/
int
-rrd_graph(int argc, char **argv, char ***prdata, int *xsize, int *ysize)
+rrd_graph(int argc, char **argv, char ***prdata, int *xsize, int *ysize, FILE *stream)
{
image_desc_t im;
rrd_graph_init(&im);
-
+ im.graphhandle = stream;
+
rrd_graph_options(argc,argv,&im);
if (rrd_test_error()) {
im_free(&im);
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 time_value start_tv, end_tv;
+ struct rrd_time_value start_tv, end_tv;
gfx_color_t color;
parsetime("end-24h", &start_tv);
{"lazy", no_argument, 0, 'z'},
{"zoom", required_argument, 0, 'm'},
{"no-legend", no_argument, 0, 'g'},
+ {"only-graph", no_argument, 0, 'j'},
{"alt-y-grid", no_argument, 0, 'Y'},
{"no-minor", no_argument, 0, 'I'},
{"alt-autoscale", no_argument, 0, 'A'},
opt = getopt_long(argc, argv,
- "s:e:x:y:v:w:h:iu:l:rb:oc:n:m:t:f:a:I:zgYAMX:S:N",
+ "s:e:x:y:v:w:h:iu:l:rb:oc:n:m:t:f:a:I:zgjYAMX:S:N",
long_options, &option_index);
if (opt == EOF)
case 'M':
im->extra_flags |= ALTAUTOSCALE_MAX;
break;
+ case 'j':
+ im->extra_flags |= ONLY_GRAPH;
+ break;
case 'g':
im->extra_flags |= NOLEGEND;
break;
&im->xlab_user.precis,
&stroff) == 7 && stroff != 0){
strncpy(im->xlab_form, optarg+stroff, sizeof(im->xlab_form) - 1);
- if((im->xlab_user.gridtm = tmt_conv(scan_gtm)) == -1){
+ if((int)(im->xlab_user.gridtm = tmt_conv(scan_gtm)) == -1){
rrd_set_error("unknown keyword %s",scan_gtm);
return;
- } else if ((im->xlab_user.mgridtm = tmt_conv(scan_mtm)) == -1){
+ } else if ((int)(im->xlab_user.mgridtm = tmt_conv(scan_mtm)) == -1){
rrd_set_error("unknown keyword %s",scan_mtm);
return;
- } else if ((im->xlab_user.labtm = tmt_conv(scan_ltm)) == -1){
+ } else if ((int)(im->xlab_user.labtm = tmt_conv(scan_ltm)) == -1){
rrd_set_error("unknown keyword %s",scan_ltm);
return;
}
im->imginfo = optarg;
break;
case 'a':
- if((im->canvas->imgformat = if_conv(optarg)) == -1) {
+ if((int)(im->canvas->imgformat = if_conv(optarg)) == -1) {
rrd_set_error("unsupported graphics format '%s'",optarg);
return;
}
n=0;
sscanf(str,"%le,%29[A-Z]%n",¶m,func,&n);
- if (n==strlen(str)) { /* matched */
+ if (n== (int)strlen(str)) { /* matched */
;
} else {
n=0;
sscanf(str,"%29[A-Z]%n",func,&n);
- if (n==strlen(str)) { /* matched */
+ if (n== (int)strlen(str)) { /* matched */
param=DNAN;
} else {
rrd_set_error("Unknown function string '%s' in VDEF '%s'"