| #include "ipf.h" | |
| extern int nohdrfields; | |
| wordtab_t *parsefields(table, arg) | |
| wordtab_t *table; | |
| char *arg; | |
| { | |
| wordtab_t *f, *fields; | |
| char *s, *t; | |
| int num; | |
| fields = NULL; | |
| num = 0; | |
| for (s = strtok(arg, ","); s != NULL; s = strtok(NULL, ",")) { | |
| t = strchr(s, '='); | |
| if (t != NULL) { | |
| *t++ = '\0'; | |
| if (*t == '\0') | |
| nohdrfields = 1; | |
| } | |
| f = findword(table, s); | |
| if (f == NULL) { | |
| fprintf(stderr, "Unknown field '%s'\n", s); | |
| exit(1); | |
| } | |
| num++; | |
| if (fields == NULL) { | |
| fields = malloc(2 * sizeof(*fields)); | |
| } else { | |
| fields = realloc(fields, (num + 1) * sizeof(*fields)); | |
| } | |
| if (t == NULL) { | |
| fields[num - 1].w_word = f->w_word; | |
| } else { | |
| fields[num - 1].w_word = t; | |
| } | |
| fields[num - 1].w_value = f->w_value; | |
| fields[num].w_word = NULL; | |
| fields[num].w_value = 0; | |
| } | |
| return fields; | |
| } |