+
+void
+rrd_graph_script_parse_def(int argc,char *argv[],int used,graph_desc_t *gdp) {
+ time_t start_tmp=0,end_tmp=0;
+ struct time_value start_tv, end_tv;
+ char *parsetime_error = NULL;
+ struct option long_options[] = {
+ { "step", required_argument, NULL, 256 },
+ { "start", required_argument, NULL, 's' },
+ { "end", required_argument, NULL, 'e' },
+ { NULL,0,NULL,0 }};
+ int option_index = 0;
+ int opt;
+
+ opterr=0;
+ optind=used;
+
+ start_tv.type=ABSOLUTE_TIME;
+ start_tv.offset=0;
+ end_tv.type=ABSOLUTE_TIME;
+ end_tv.offset=0;
+ memcpy(&start_tv.tm, gmtime(&gdp->start) , sizeof(struct tm) );
+ memcpy(&end_tv.tm, gmtime(&gdp->end) , sizeof(struct tm) );
+
+ while (1) {
+ opt = getopt_long(argc,argv,"-s:e:", long_options,&option_index);
+ if (opt==-1) break;
+ switch (opt) {
+ case 1:
+ printf("DEBUG: found non-option[%i] %s\n",optind,optarg);
+ break;
+ case 's':
+ if ((parsetime_error = parsetime(optarg, &start_tv))) {
+ rrd_set_error( "DEF start time: %s", parsetime_error );
+ return;
+ }
+ break;
+ case 'e':
+ if ((parsetime_error = parsetime(optarg, &end_tv))) {
+ rrd_set_error( "DEF end time: %s", parsetime_error );
+ return;
+ }
+ break;
+ case 256:
+ gdp->step = atol(optarg);
+ break;
+ case '?':
+ printf("DEBUG: unrecognized option %s\n",argv[optind]);
+ break;
+ case ':':
+ printf("DEBUG: option %c needs parameter\n",optopt);
+ break;
+ default:
+ printf("DEBUG: getopt returned unknown char %c\n",opt);
+ break;
+ }
+ }
+ if (optind < argc) {
+ printf("DEBUG: %i remaining parameters:\n",argc-optind);
+ while (optind<argc)
+ printf("DEBUG: %3i: %s\n",optind,argv[optind++]);
+ printf("\n");
+ }
+
+ if (proc_start_end(&start_tv,&end_tv,&start_tmp,&end_tmp) == -1){
+ /* error string is set in parsetime.c */
+ return;
+ }
+
+ if (start_tmp < 3600*24*365*10){
+ rrd_set_error("the first entry to fetch should be after 1980 (%ld)",start_tmp);
+ return;
+ }
+
+ if (end_tmp < start_tmp) {
+ rrd_set_error("start (%ld) should be less than end (%ld)",
+ start_tmp, end_tmp);
+ return;
+ }
+
+ gdp->start = start_tmp;
+ gdp->end = end_tmp;
+}
+