123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- /***********************************************************
- * parse_val_list (buf, list)
- * char *buf; int **list;
- *
- * buf is a comma separated list of values
- * or value ranges: 1,2,6-10,12
- *
- * actual usage is
- * char buf[300]; DCELL *list;
- *
- * count = parse_val_list (buf, &list);
- *
- * for (i = 0; i < count; i += 2)
- * {
- * min = list[i];
- * max = list[i+1];
- * }
- *
- * count will be negative if list is not valid
- ********************************************************/
- #include <grass/raster.h>
- int parse_val_list(char *buf, DCELL ** list)
- {
- int count;
- DCELL a, b;
- DCELL *lp;
- count = 0;
- lp = (DCELL *) G_malloc(sizeof(DCELL));
- while (*buf) {
- while (*buf == ' ' || *buf == '\t' || *buf == '\n' || *buf == ',')
- buf++;
- if (sscanf(buf, "%lf-%lf", &a, &b) == 2) {
- if (a > b) {
- DCELL t;
- t = a;
- a = b;
- b = t;
- }
- lp = (DCELL *) G_realloc(lp, (count + 2) * sizeof(DCELL));
- lp[count++] = a;
- lp[count++] = b;
- }
- else if (sscanf(buf, "%lf", &a) == 1) {
- lp = (DCELL *) G_realloc(lp, (count + 2) * sizeof(DCELL));
- lp[count++] = a;
- lp[count++] = a;
- }
- else {
- G_free(lp);
- return -1;
- }
- while (*buf && (*buf != ','))
- buf++;
- }
- *list = lp;
- return count;
- }
|