* resulting data source.
*/
for(rpi=0;im->gdes[gdi].rpnp[rpi].op != OP_END;rpi++){
- if(im->gdes[gdi].rpnp[rpi].op == OP_VARIABLE){
+ if(im->gdes[gdi].rpnp[rpi].op == OP_VARIABLE ||
+ im->gdes[gdi].rpnp[rpi].op == OP_PREV_OTHER){
long ptr = im->gdes[gdi].rpnp[rpi].ptr;
if (im->gdes[ptr].ds_cnt == 0) {
#if 0
-printf("DEBUG: inside CDEF '%s' processing VDEF '%s'\n",
+ printf("DEBUG: inside CDEF '%s' processing VDEF '%s'\n",
im->gdes[gdi].vname,
im->gdes[ptr].vname);
-printf("DEBUG: value from vdef is %f\n",im->gdes[ptr].vf.val);
+ printf("DEBUG: value from vdef is %f\n",im->gdes[ptr].vf.val);
#endif
im->gdes[gdi].rpnp[rpi].val = im->gdes[ptr].vf.val;
im->gdes[gdi].rpnp[rpi].op = OP_NUMBER;
} else {
- if ((steparray = rrd_realloc(steparray, (++stepcnt+1)*sizeof(*steparray)))==NULL){
+ if ((steparray =
+ rrd_realloc(steparray,
+ (++stepcnt+1)*sizeof(*steparray)))==NULL){
rrd_set_error("realloc steparray");
rpnstack_free(&rpnstack);
return -1;
/* move the data pointers to the correct period */
for(rpi=0;im->gdes[gdi].rpnp[rpi].op != OP_END;rpi++){
- if(im->gdes[gdi].rpnp[rpi].op == OP_VARIABLE){
+ if(im->gdes[gdi].rpnp[rpi].op == OP_VARIABLE ||
+ im->gdes[gdi].rpnp[rpi].op == OP_PREV_OTHER){
long ptr = im->gdes[gdi].rpnp[rpi].ptr;
if(im->gdes[gdi].start > im->gdes[ptr].start) {
im->gdes[gdi].rpnp[rpi].data += im->gdes[gdi].rpnp[rpi].ds_cnt;
if (im->gdes[i].gf == GF_PRINT){
(*prdata)[prlines-2] = malloc((FMT_LEG_LEN+2)*sizeof(char));
+ (*prdata)[prlines-1] = NULL;
if (bad_format(im->gdes[i].format)) {
rrd_set_error("bad format for [G]PRINT in '%s'", im->gdes[i].format);
return -1;
#else
sprintf((*prdata)[prlines-2],im->gdes[i].format,printval,si_symb);
#endif
- (*prdata)[prlines-1] = NULL;
} else {
/* GF_GPRINT */
{"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'},
+ {"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:zgYAMX:S:N",
long_options, &option_index);
if (opt == EOF)
break;
switch(opt) {
- case 257:
+ 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:
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++;
}
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?'*':' ');