- if (rrd_parse_find_gf(argv[i],&eaten,gdp)) return;
-
- switch (gdp->gf) {
- case GF_SHIFT: /* vname:value */
- if (rrd_parse_shift(argv[i],&eaten,gdp,im)) return;
- break;
- case GF_XPORT:
- if (rrd_parse_xport(argv[i],&eaten,gdp,im)) return;
- break;
- case GF_PRINT: /* vname:CF:format -or- vname:format */
- im->prt_c++;
- case GF_GPRINT: /* vname:CF:format -or- vname:format */
- if (rrd_parse_print(argv[i],&eaten,gdp,im)) return;
- break;
- case GF_COMMENT: /* text */
- if (rrd_parse_legend(argv[i],&eaten,gdp)) return;
- break;
- case GF_STACK: /* vname-or-value[#color[:legend]] */
-#ifdef WITH_PIECHART
- case GF_PART: /* value[#color[:legend]] */
-#endif
- case GF_VRULE: /* value#color[:legend] */
- case GF_HRULE: /* value#color[:legend] */
- case GF_LINE: /* vname-or-value[#color[:legend]][:STACK] */
- case GF_AREA: /* vname-or-value[#color[:legend]][:STACK] */
- case GF_TICK: /* vname#color[:num[:legend]] */
- if (rrd_parse_PVHLAST(argv[i],&eaten,gdp,im)) return;
- break;
- /* data acquisition */
- case GF_DEF: /* vname=x:DS:CF:[:step=#][:start=#][:end=#] */
- if (rrd_parse_def(argv[i],&eaten,gdp,im)) return;
- break;
- case GF_CDEF: /* vname=rpn-expression */
- if (rrd_parse_cdef(argv[i],&eaten,gdp,im)) return;
- break;
- case GF_VDEF: /* vname=rpn-expression */
- if (rrd_parse_vdef(argv[i],&eaten,gdp,im)) return;
- break;
- }
- if (gdp->debug) {
- dprintf("used %i out of %i chars\n",eaten,strlen(argv[i]));
- dprintf("parsed line: '%s'\n",argv[i]);
- dprintf("remaining: '%s'\n",&argv[i][eaten]);
- if (eaten >= strlen(argv[i]))
- dprintf("Command finished successfully\n");
- }
- if (eaten < strlen(argv[i])) {
- rrd_set_error("Garbage '%s' after command:\n%s",
- &argv[i][eaten],argv[i]);
- return;
- }
+ if (rrd_parse_find_gf(argv[i], &eaten, gdp))
+ return;
+
+ switch (gdp->gf) {
+ case GF_SHIFT: /* vname:value */
+ if (rrd_parse_shift(argv[i], &eaten, gdp, im))
+ return;
+ break;
+ case GF_TEXTALIGN: /* left|right|center|justified */
+ if (rrd_parse_textalign(argv[i], &eaten, gdp))
+ return;
+ break;
+ case GF_XPORT:
+ if (rrd_parse_xport(argv[i], &eaten, gdp, im))
+ return;
+ break;
+ case GF_PRINT: /* vname:CF:format -or- vname:format */
+ im->prt_c++;
+ case GF_GPRINT: /* vname:CF:format -or- vname:format */
+ if (rrd_parse_print(argv[i], &eaten, gdp, im))
+ return;
+ break;
+ case GF_COMMENT: /* text */
+ if (rrd_parse_legend(argv[i], &eaten, gdp))
+ return;
+ break;
+ case GF_VRULE: /* value#color[:legend] */
+ case GF_HRULE: /* value#color[:legend] */
+ case GF_LINE: /* vname-or-value[#color[:legend]][:STACK] */
+ case GF_AREA: /* vname-or-value[#color[:legend]][:STACK] */
+ case GF_TICK: /* vname#color[:num[:legend]] */
+ if (rrd_parse_PVHLAST(argv[i], &eaten, gdp, im))
+ return;
+ last_gf = gdp->gf;
+ last_linewidth = gdp->linewidth;
+ break;
+ case GF_STACK: /* vname-or-value[#color[:legend]] */
+ if (rrd_parse_PVHLAST(argv[i], &eaten, gdp, im))
+ return;
+ if (last_gf == GF_LINE || last_gf == GF_AREA) {
+ gdp->gf = last_gf;
+ gdp->linewidth = last_linewidth;
+ } else {
+ rrd_set_error("STACK must follow LINE or AREA! command:\n%s",
+ &argv[i][eaten], argv[i]);
+ return;
+ }
+ break;
+ /* data acquisition */
+ case GF_DEF: /* vname=x:DS:CF:[:step=#][:start=#][:end=#] */
+ if (rrd_parse_def(argv[i], &eaten, gdp, im))
+ return;
+ break;
+ case GF_CDEF: /* vname=rpn-expression */
+ if (rrd_parse_cdef(argv[i], &eaten, gdp, im))
+ return;
+ break;
+ case GF_VDEF: /* vname=rpn-expression */
+ if (rrd_parse_vdef(argv[i], &eaten, gdp, im))
+ return;
+ break;
+ }
+ if (gdp->debug) {
+ dprintf("used %i out of %zi chars\n", eaten, strlen(argv[i]));
+ dprintf("parsed line: '%s'\n", argv[i]);
+ dprintf("remaining: '%s'\n", &argv[i][eaten]);
+ if (eaten >= strlen(argv[i]))
+ dprintf("Command finished successfully\n");
+ }
+ if (eaten < strlen(argv[i])) {
+ rrd_set_error("I don't understand '%s' in command: '%s'.",
+ &argv[i][eaten], argv[i]);
+ return;
+ }