+ if (i >= argc)
+ usage("Option -i parameter is missing.\n");
+ param = argv[i++];
+ if (!is_decimal(param))
+ usage("Option -i parameter is invalid: \"%s\"\n", param);
+ cfg->interval = atof(param);
+ opts_parse_any(cfg, argc, argv, i);
+}
+
+void
+parse_opts_opt_s(Config *cfg, int argc, char *argv[], int i)
+{
+ if (i >= argc)
+ usage("Option -s parameter is missing.\n");
+ cfg->separator = calloc((strlen(argv[i]) + 1), sizeof(char));
+ strcpy(cfg->separator, argv[i]);
+ opts_parse_any(cfg, argc, argv, ++i);
+}
+
+void
+parse_opts_opt_l(Config *cfg, int argc, char *argv[], int i)
+{
+ char *param;
+ int log_level;
+
+ if (i >= argc)
+ usage("Option -l parameter is missing.\n");
+ param = argv[i++];
+ if (!is_pos_num(param))
+ usage("Option -l parameter is invalid: \"%s\"\n", param);
+ log_level = atoi(param);
+ if (log_level > Debug)
+ usage(
+ "Option -l value (%d) exceeds maximum (%d)\n",
+ log_level,
+ Debug
+ );
+ _khlib_log_level = log_level;
+ opts_parse_any(cfg, argc, argv, i);
+}
+
+void
+parse_opts_opt_e(Config *cfg, int argc, char *argv[], int i)
+{
+ if (i >= argc)
+ usage("Option -e parameter is missing.\n");
+ cfg->expiry_character = argv[i++][0];
+ opts_parse_any(cfg, argc, argv, i);
+}
+
+void
+parse_opts_opt(Config *cfg, int argc, char *argv[], int i)
+{
+ switch (argv[i][1]) {
+ case 'i':
+ /* TODO: Generic set_int */
+ parse_opts_opt_i(cfg, argc, argv, ++i);
+ break;
+ case 's':
+ /* TODO: Generic set_str */
+ parse_opts_opt_s(cfg, argc, argv, ++i);
+ break;
+ case 'x':
+ cfg->to_x_root = 1;
+ opts_parse_any(cfg, argc, argv, ++i);
+ break;
+ case 'l':
+ /* TODO: Generic set_int */
+ parse_opts_opt_l(cfg, argc, argv, ++i);
+ break;
+ case 'e':
+ /* TODO: Generic set_str */
+ parse_opts_opt_e(cfg, argc, argv, ++i);
+ break;
+ default :
+ usage("Option \"%s\" is invalid\n", argv[i]);