added function (--no-minor) to turn off minor gridlines on graphs
[rrdtool.git] / src / rrd_graph.c
index 2fc6526..a037563 100644 (file)
@@ -1591,7 +1591,7 @@ int draw_horizontal_grid(image_desc_t *im)
                              MGRIDWIDTH, im->graph_col[GRC_MGRID],
                              im->grid_dash_on, im->grid_dash_off);            
               
-           } else {            
+           } else if (!(im->extra_flags & NOMINOR)) {          
               gfx_new_dashed_line ( im->canvas,
                              X0-1,Y0,
                              X1+1,Y0,
@@ -1721,27 +1721,30 @@ vertical_grid(
    
 
     /* paint the minor grid */
-    for(ti = find_first_time(im->start,
-                           im->xlab_user.gridtm,
-                           im->xlab_user.gridst),
-        timajor = find_first_time(im->start,
-                           im->xlab_user.mgridtm,
-                           im->xlab_user.mgridst);
-       ti < im->end; 
-       ti = find_next_time(ti,im->xlab_user.gridtm,im->xlab_user.gridst)
-       ){
-       /* are we inside the graph ? */
-       if (ti < im->start || ti > im->end) continue;
-       while (timajor < ti) {
-           timajor = find_next_time(timajor,
-                   im->xlab_user.mgridtm, im->xlab_user.mgridst);
-       }
-       if (ti == timajor) continue; /* skip as falls on major grid line */
-       X0 = xtr(im,ti);       
-       gfx_new_dashed_line(im->canvas,X0,Y0+1, X0,Y1-1,GRIDWIDTH,
-          im->graph_col[GRC_GRID],
-          im->grid_dash_on, im->grid_dash_off);
-       
+    if (!(im->extra_flags & NOMINOR))
+    {
+        for(ti = find_first_time(im->start,
+                                im->xlab_user.gridtm,
+                                im->xlab_user.gridst),
+            timajor = find_first_time(im->start,
+                                im->xlab_user.mgridtm,
+                                im->xlab_user.mgridst);
+            ti < im->end; 
+            ti = find_next_time(ti,im->xlab_user.gridtm,im->xlab_user.gridst)
+            ){
+            /* are we inside the graph ? */
+            if (ti < im->start || ti > im->end) continue;
+            while (timajor < ti) {
+                timajor = find_next_time(timajor,
+                        im->xlab_user.mgridtm, im->xlab_user.mgridst);
+            }
+            if (ti == timajor) continue; /* skip as falls on major grid line */
+           X0 = xtr(im,ti);       
+           gfx_new_dashed_line(im->canvas,X0,Y0+1, X0,Y1-1,GRIDWIDTH,
+               im->graph_col[GRC_GRID],
+               im->grid_dash_on, im->grid_dash_off);
+           
+        }
     }
 
     /* paint the major grid */
@@ -2707,41 +2710,45 @@ 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'},
-           {"alt-y-grid", no_argument,       0,   257 },
-           {"alt-autoscale", no_argument,    0,   258 },
-           {"alt-autoscale-max", no_argument,    0,   259 },
-           {"units-exponent",required_argument, 0,  260},
-           {"step",       required_argument, 0,   261},
-           {"no-gridfit", no_argument,       0,   262},
+           {"alt-y-grid", no_argument,       0,  'Y'},
+            {"no-minor",   no_argument,       0,  'I'},
+           {"alt-autoscale", no_argument,    0,  'A'},
+           {"alt-autoscale-max", no_argument, 0, 'M'},
+           {"units-exponent",required_argument, 0, 'X'},
+           {"step",       required_argument, 0,    'S'},
+           {"no-gridfit", no_argument,       0,   'N'},
            {0,0,0,0}};
        int option_index = 0;
        int opt;
 
 
        opt = getopt_long(argc, argv, 
-                         "s:e:x:y:v:w:h:iu:l:rb:oc:n:m:t:f:a:z:g",
+                         "s:e:x:y:v:w:h:iu:l:rb:oc:n:m:t:f:a:I:zgYAMX:S:N",
                          long_options, &option_index);
 
        if (opt == EOF)
            break;
        
        switch(opt) {
-       case 257:
+        case 'I':
+            im->extra_flags |= NOMINOR;
+            break;
+       case 'Y':
            im->extra_flags |= ALTYGRID;
            break;
-       case 258:
+       case 'A':
            im->extra_flags |= ALTAUTOSCALE;
            break;
-       case 259:
+       case 'M':
            im->extra_flags |= ALTAUTOSCALE_MAX;
            break;
        case 'g':
            im->extra_flags |= NOLEGEND;
            break;
-       case 260:
+       case 'X':
            im->unitsexponent = atoi(optarg);
            break;
-       case 261:
+       case 'S':
            im->step =  atoi(optarg);
            break;
        case 262:
@@ -3064,9 +3071,9 @@ int bad_format(char *fmt) {
                  if (*ptr == '.') ptr++;
                  while (*ptr >= '0' && *ptr <= '9') ptr++;
   
-                 /* Either 'le' or 'lf' must follow here */
+                 /* Either 'le', 'lf' or 'lg' must follow here */
                  if (*ptr++ != 'l') return 1;
-                 if (*ptr == 'e' || *ptr == 'f') ptr++;
+                 if (*ptr == 'e' || *ptr == 'f' || *ptr == 'g') ptr++;
                  else return 1;
                  n++;
             }
@@ -3204,6 +3211,7 @@ printf("DEBUG: start == %lu, end == %lu, %lu steps\n"
                field = (steps-1)*dst->vf.param/100;
                dst->vf.val  = array[field];
                dst->vf.when = 0;       /* no time component */
+               free(array);
 #if 0
 for(step=0;step<steps;step++)
 printf("DEBUG: %3li:%10.2f %c\n",step,array[step],step==field?'*':' ');