diff --git a/lib/roken/getarg.c b/lib/roken/getarg.c index 5fbdc6c91..23a326d4f 100644 --- a/lib/roken/getarg.c +++ b/lib/roken/getarg.c @@ -70,9 +70,11 @@ print_arg (char *string, size_t len, int mdoc, int longp, struct getargs *arg) if (arg->arg_help) s = arg->arg_help; else if (arg->type == arg_integer) - s = "number"; + s = "integer"; else if (arg->type == arg_string) s = "string"; + else if (arg->type == arg_double) + s = "float"; else s = ""; @@ -383,6 +385,14 @@ arg_match_long(struct getargs *args, size_t num_args, } return ARG_ERR_BAD_ARG; } + case arg_double: + { + double tmp; + if(sscanf(optarg + 1, "%lf", &tmp) != 1) + return ARG_ERR_BAD_ARG; + *(double*)current->value = tmp; + return 0; + } default: abort (); } @@ -443,6 +453,12 @@ getarg(struct getargs *args, size_t num_args, }else if(args[k].type == arg_strings){ add_string((getarg_strings*)args[k].value, optarg); goto out; + } else if(args[k].type == arg_double){ + double tmp; + if(sscanf(optarg, "%lf", &tmp) != 1) + return ARG_ERR_BAD_ARG; + *(double*)args[k].value = tmp; + goto out; } return ARG_ERR_BAD_ARG; } diff --git a/lib/roken/getarg.h b/lib/roken/getarg.h index d699121d7..996ea4f20 100644 --- a/lib/roken/getarg.h +++ b/lib/roken/getarg.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997 Kungliga Tekniska Högskolan + * Copyright (c) 1997, 1999 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -46,7 +46,13 @@ struct getargs{ const char *long_name; char short_name; - enum { arg_integer, arg_string, arg_flag, arg_negative_flag, arg_strings } type; + enum { arg_integer, + arg_string, + arg_flag, + arg_negative_flag, + arg_strings, + arg_double + } type; void *value; const char *help; const char *arg_help;