b2/boom.c |
14 | 14 | #include <stdio.h> |
15 | 15 | #include <string.h> |
16 | 16 | |
| 17 | #include "util.h" |
17 | 18 | #include "lang.h" |
| 19 | #include "subex.h" |
| 20 | |
| 21 | |
| 22 | static struct var *vars = NULL, **last_var = &vars; |
| 23 | |
| 24 | |
| 25 | static void add_var(const char *arg) |
| 26 | { |
| 27 | char *tmp = stralloc(arg); |
| 28 | char *eq; |
| 29 | |
| 30 | eq = strchr(tmp, '='); |
| 31 | if (!eq) { |
| 32 | fprintf(stderr, "no = in variable setting\n"); |
| 33 | exit(1); |
| 34 | } |
| 35 | *eq = 0; |
| 36 | *last_var = make_var(tmp, eq+1); |
| 37 | last_var = &(*last_var)->next; |
| 38 | } |
| 39 | |
| 40 | |
| 41 | static void do_substitutions(void) |
| 42 | { |
| 43 | struct var *out; |
| 44 | const struct var *var; |
| 45 | |
| 46 | out = substitute(substitutions, vars); |
| 47 | for (var = out; var; var = var->next) |
| 48 | printf("%s=%s\n", var->name, var->value); |
| 49 | free_vars(out); |
| 50 | } |
18 | 51 | |
19 | 52 | |
20 | 53 | static void usage(const char *name) |
21 | 54 | { |
22 | 55 | fprintf(stderr, |
23 | | "usage: %s file [[-type] file ...] ...\n\n" |
| 56 | "usage: %s file [[-type] file ...] [-q var=value ...] ...\n\n" |
24 | 57 | " file types:\n" |
25 | 58 | " -c characteristics\n" |
26 | 59 | " -i inventory\n" |
27 | 60 | " -x currency exchange\n" |
28 | 61 | " -p providers\n" |
29 | 62 | " -s substitutions\n" |
| 63 | " -q var=value ...\n" |
30 | 64 | , name); |
31 | 65 | exit(1); |
32 | 66 | } |
... | ... | |
34 | 68 | |
35 | 69 | int main(int argc, char **argv) |
36 | 70 | { |
37 | | void (*parse)(const char *name) = parse_hierarchy; |
| 71 | void (*process)(const char *name) = parse_hierarchy; |
38 | 72 | int i; |
39 | 73 | |
40 | 74 | for (i = 1; i != argc; i++) { |
41 | 75 | if (*argv[i] == '-') { |
42 | 76 | if (!strcmp(argv[i], "-c")) |
43 | | parse = parse_characteristics; |
| 77 | process = parse_characteristics; |
44 | 78 | else if (!strcmp(argv[i], "-i")) |
45 | | parse = parse_inventory; |
| 79 | process = parse_inventory; |
46 | 80 | else if (!strcmp(argv[i], "-x")) |
47 | | parse = parse_currencies; |
| 81 | process = parse_currencies; |
48 | 82 | else if (!strcmp(argv[i], "-p")) |
49 | | parse = parse_providers; |
| 83 | process = parse_providers; |
50 | 84 | else if (!strcmp(argv[i], "-s")) |
51 | | parse = parse_substitutions; |
| 85 | process = parse_substitutions; |
| 86 | else if (!strcmp(argv[i], "-q")) |
| 87 | process = add_var; |
52 | 88 | else |
53 | 89 | usage(*argv); |
54 | 90 | } else { |
55 | | parse(argv[i]); |
| 91 | process(argv[i]); |
56 | 92 | } |
57 | 93 | } |
| 94 | if (vars) |
| 95 | do_substitutions(); |
58 | 96 | return 0; |
59 | 97 | } |