1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
| #include <stdlib.h>
| #include <stdio.h>
| #include <string.h>
| #include "option_list.h"
|
| typedef struct{
| char *key;
| char *val;
| int used;
| } kvp;
|
| void option_insert(list *l, char *key, char *val)
| {
| kvp *p = malloc(sizeof(kvp));
| p->key = key;
| p->val = val;
| p->used = 0;
| list_insert(l, p);
| }
|
| void option_unused(list *l)
| {
| node *n = l->front;
| while(n){
| kvp *p = (kvp *)n->val;
| if(!p->used){
| fprintf(stderr, "Unused field: '%s = %s'\n", p->key, p->val);
| }
| n = n->next;
| }
| }
|
| char *option_find(list *l, char *key)
| {
| node *n = l->front;
| while(n){
| kvp *p = (kvp *)n->val;
| if(strcmp(p->key, key) == 0){
| p->used = 1;
| return p->val;
| }
| n = n->next;
| }
| return 0;
| }
| char *option_find_str(list *l, char *key, char *def)
| {
| char *v = option_find(l, key);
| if(v) return v;
| fprintf(stderr, "%s: Using default '%s'\n", key, def);
| return def;
| }
|
| int option_find_int(list *l, char *key, int def)
| {
| char *v = option_find(l, key);
| if(v) return atoi(v);
| fprintf(stderr, "%s: Using default '%d'\n", key, def);
| return def;
| }
|
| float option_find_float(list *l, char *key, float def)
| {
| char *v = option_find(l, key);
| if(v) return atof(v);
| fprintf(stderr, "%s: Using default '%lf'\n", key, def);
| return def;
| }
|
|