Supporting functions for rrd_graph. Functions that are used frequently
[rrdtool.git] / src / rrd_graph_helper.c
1 /**********************************************************
2  *** Several generic helper functions for rrd_graph.c   ***
3  **********************************************************/
4
5 #include "rrd_graph.h"
6 #include "rrd_graph_helper.h"
7
8 /**********************************************************
9  *** Helper functions for parsing command file          ***
10  **********************************************************/
11
12 /* Parse a VNAME followed by an equal sign ( CDEF:VNAME= )
13  *
14  * Input:       pointer to argv
15  * Input:       pointer to im structure
16  * Input:       pointer to error string
17  * Output:      number of chars eaten (0 means error)
18  *
19  * Usage:       n=parse_vname( &argv[i][argstart],&im, "VDEF");
20  *              if (n==0) { error } else { argstart+=n };
21  */
22 int
23 parse_vname1(cptr,im,err)
24 char *          cptr;
25 image_desc_t *  im;
26 char *          err;
27 {
28     int         n=0,vidx;
29
30     sscanf(cptr, DEF_NAM_FMT "=%n",im->gdes[im->gdes_c-1].vname,&n);
31
32     /* Check if the sequence matches, including the
33      * terminating equal sign */
34     if (n==0) {
35         im_free(im);
36         rrd_set_error("Can't parse VNAME in %s: '%s'",err,cptr);
37         return 0;
38     }
39
40     /* Check if this is an unused variable */
41     vidx=find_var(im,im->gdes[im->gdes_c-1].vname);
42     if (vidx!=-1) {
43         switch(im->gdes[vidx].gf) {
44             case GF_DEF:
45                 rrd_set_error("Duplicate variable in %s: '%s' defined as DEF",
46                         err,im->gdes[im->gdes_c-1].vname);
47                 break;
48             case GF_CDEF:
49                 rrd_set_error("Duplicate variable in %s: '%s' defined as CDEF",
50                         err,im->gdes[im->gdes_c-1].vname);
51                 break;
52             case GF_VDEF:
53                 rrd_set_error("Duplicate variable in %s: '%s' defined as VDEF",
54                         err,im->gdes[im->gdes_c-1].vname);
55                 break;
56             default:
57                 rrd_set_error("Duplicate variable in %s: '%s' defined",
58                         err,im->gdes[im->gdes_c-1].vname);
59                 break;
60         };
61         im_free(im);
62         return 0;
63     }
64
65     /* VNAME must start with a character other than numeric */
66     if (isdigit(im->gdes[im->gdes_c-1].vname[0])) {
67         rrd_set_error("Variable in %s starts with a digit: '%s'",
68                 err,im->gdes[im->gdes_c-1].vname);
69         im_free(im);
70         return 0;
71     };
72
73     /* Reserved words checking.  Not at the moment. */
74
75     return n;
76 }
77
78 /**********************************************************
79  ***                                                    ***
80  **********************************************************/
81