| | |
| | | #include <stdio.h> |
| | | #include <string.h> |
| | | #include "option_list.h" |
| | | #include "utils.h" |
| | | |
| | | list *read_data_cfg(char *filename) |
| | | { |
| | | FILE *file = fopen(filename, "r"); |
| | | if(file == 0) file_error(filename); |
| | | char *line; |
| | | int nu = 0; |
| | | list *options = make_list(); |
| | | while((line=fgetl(file)) != 0){ |
| | | ++nu; |
| | | strip(line); |
| | | switch(line[0]){ |
| | | case '\0': |
| | | case '#': |
| | | case ';': |
| | | free(line); |
| | | break; |
| | | default: |
| | | if(!read_option(line, options)){ |
| | | fprintf(stderr, "Config file error line %d, could parse: %s\n", nu, line); |
| | | free(line); |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | fclose(file); |
| | | return options; |
| | | } |
| | | |
| | | metadata get_metadata(char *file) |
| | | { |
| | | metadata m = { 0 }; |
| | | list *options = read_data_cfg(file); |
| | | |
| | | char *name_list = option_find_str(options, "names", 0); |
| | | if (!name_list) name_list = option_find_str(options, "labels", 0); |
| | | if (!name_list) { |
| | | fprintf(stderr, "No names or labels found\n"); |
| | | } |
| | | else { |
| | | m.names = get_labels(name_list); |
| | | } |
| | | m.classes = option_find_int(options, "classes", 2); |
| | | free_list(options); |
| | | printf("Loaded - names_list: %s, classes = %d \n", name_list, m.classes); |
| | | return m; |
| | | } |
| | | |
| | | int read_option(char *s, list *options) |
| | | { |
| | | size_t i; |
| | | size_t len = strlen(s); |
| | | char *val = 0; |
| | | for(i = 0; i < len; ++i){ |
| | | if(s[i] == '='){ |
| | | s[i] = '\0'; |
| | | val = s+i+1; |
| | | break; |
| | | } |
| | | } |
| | | if(i == len-1) return 0; |
| | | char *key = s; |
| | | option_insert(options, key, val); |
| | | return 1; |
| | | } |
| | | |
| | | void option_insert(list *l, char *key, char *val) |
| | | { |