/* See {dsm_image.h} */ /* Last edited on 2016-04-10 18:45:03 by stolfilocal */ #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include void dsm_region_arg_parse(argparser_t *pp, const char *keyword, int nrmin, int nrmax, int *nrP, dsm_region_t **listP) { int nr = 0; dsm_region_t *regs = (dsm_region_t *)notnull(malloc(nrmax*sizeof(dsm_region_t)), "out of mem"); while (argparser_keyword_present(pp, "-region")) { int dx = (int32_t)argparser_get_next_int(pp, 0, dsm_image_size_MAX - 1); int dy = (int32_t)argparser_get_next_int(pp, 0, dsm_image_size_MAX - 1); int nx = (int32_t)argparser_get_next_int(pp, 1, dsm_image_size_MAX - dx); int ny = (int32_t)argparser_get_next_int(pp, 1, dsm_image_size_MAX - dy); regs[nr] = (dsm_region_t){ .dx = dx, .dy = dy, .nx = nx, .ny = ny }; nr++; } if ((nr < nrmin) || (nr > nrmax)) { char *msg = NULL; char *msg = jsprintf("must specify \"%s\" at least %d and at most %d times", keyword, nrmin, nrmax); argparser_error(pp, ""); } (*listP) = (dsm_region_t *)realloc(regs, nr*sizeof(dsm_region_t)); (*nrP) = nr; }