The "$^" variable is GNU make-specific, and fails to compile under
[rrdtool.git] / src / rrd_graph.c
index afcbc01..a44cb09 100644 (file)
@@ -601,7 +601,7 @@ printf("row_cnt after:   %lu\n",row_cnt);
     ** 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;
@@ -681,11 +681,11 @@ for (col=0;col<row_cnt;col++) {
 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;
@@ -743,8 +743,8 @@ data_fetch(image_desc_t *im )
            }
        }
        
-        /* 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; }
        }
@@ -1015,8 +1015,8 @@ data_proc( image_desc_t *im ){
                        ** 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)
@@ -1357,7 +1357,7 @@ leg_place(image_desc_t *im)
     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;
@@ -1900,16 +1900,16 @@ grid_paint(image_desc_t   *im)
                          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),
@@ -1932,7 +1932,7 @@ grid_paint(image_desc_t   *im)
                  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;
@@ -2084,11 +2084,20 @@ graph_size_location(image_desc_t *im, int elements, int piechart )
 #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') {
@@ -2134,10 +2143,21 @@ graph_size_location(image_desc_t *im, int elements, int piechart )
     ** 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;
@@ -2155,9 +2175,21 @@ graph_size_location(image_desc_t *im, int elements, int piechart )
     */
 
     /* 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;
@@ -2260,9 +2292,11 @@ graph_paint(image_desc_t *im, char ***calcpr)
 
   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.              ***
@@ -2294,8 +2328,8 @@ graph_paint(image_desc_t *im, char ***calcpr)
       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) {
@@ -2447,7 +2481,8 @@ graph_paint(image_desc_t *im, char ***calcpr)
     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++){    
@@ -2740,6 +2775,7 @@ rrd_graph_options(int argc, char *argv[],image_desc_t *im)
            {"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'},
@@ -2753,7 +2789,7 @@ rrd_graph_options(int argc, char *argv[],image_desc_t *im)
 
 
        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)
@@ -2772,6 +2808,9 @@ rrd_graph_options(int argc, char *argv[],image_desc_t *im)
        case 'M':
            im->extra_flags |= ALTAUTOSCALE_MAX;
            break;
+       case 'j':
+           im->extra_flags |= ONLY_GRAPH;
+           break;
        case 'g':
            im->extra_flags |= NOLEGEND;
            break;
@@ -2813,13 +2852,13 @@ rrd_graph_options(int argc, char *argv[],image_desc_t *im)
                      &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;
                } 
@@ -2896,7 +2935,7 @@ rrd_graph_options(int argc, char *argv[],image_desc_t *im)
            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;
            }
@@ -3127,12 +3166,12 @@ char *str;
     
     n=0;
     sscanf(str,"%le,%29[A-Z]%n",&param,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'"