| #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; |
| } |