better handling of float cli arguments

This commit is contained in:
tth 2019-09-16 12:28:47 +02:00
parent b85b66caed
commit c3bc39750d
4 changed files with 39 additions and 8 deletions

View File

@ -88,5 +88,8 @@ int fimg_save_as_png(FloatImg *src, char *outname, int flags);
int fimg_draw_something(FloatImg *fimg); int fimg_draw_something(FloatImg *fimg);
int parse_WxH(char *str, int *pw, int *ph); int parse_WxH(char *str, int *pw, int *ph);
int parse_double(char *str, double *dptr);

View File

@ -8,20 +8,28 @@
#include "../floatimg.h" #include "../floatimg.h"
int fimg_pnm_infos(char *);
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
int foo; int foo;
char *infile = "foo.pnm"; double dval;
char *str;
pnm_init(&argc, argv); str = "12.34"; dval = 0.0;
foo = parse_double(str, &dval);
printf("%-10s -> %3d %g\n", str, foo, dval);
if (2 == argc) infile = argv[1]; str = "12e4"; dval = 0.0;
foo = parse_double(str, &dval);
printf("%-10s -> %3d %g\n", str, foo, dval);
foo = fimg_pnm_infos(infile); str = "5s"; dval = 0.0;
fprintf(stderr, "got %d\n", foo); foo = parse_double(str, &dval);
printf("%-10s -> %3d %g\n", str, foo, dval);
str = "PORN"; dval = 0.0;
foo = parse_double(str, &dval);
printf("%-10s -> %3d %g\n", str, foo, dval);
return 0; return 0;
} }

View File

@ -29,3 +29,16 @@ if (2 != foo) {
return 2; return 2;
} }
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */
int parse_double(char *str, double *dptr)
{
double value;
int foo;
foo = sscanf(str, "%lf", &value);
if (1 == foo) {
*dptr = value;
return 1;
}
return -1;
}
/* --------------------------------------------------------------------- */

View File

@ -122,7 +122,14 @@ while ((opt = getopt(argc, argv, "d:ghn:o:O:p:s:uv")) != -1) {
case 'n': nbre_capt = atoi(optarg); break; case 'n': nbre_capt = atoi(optarg); break;
case 'O': dest_dir = optarg; break; case 'O': dest_dir = optarg; break;
case 'o': outfile = optarg; break; case 'o': outfile = optarg; break;
case 'p': period = 1e6*atof(optarg); break; case 'p': foo = parse_double(optarg, &period);
if (foo<0) {
fprintf(stderr,
"error parsing -p arg '%s'\n",
optarg);
exit(1);
}
break;
case 's': parse_WxH(optarg, &width, &height); case 's': parse_WxH(optarg, &width, &height);
break; break;
case 'u': upscaling = 1; break; case 'u': upscaling = 1; break;