Date:2012-05-21 00:01:49 (11 years 10 months ago)
Author:Werner Almesberger
Commit:8e6357f4fa4e03ac8f62a427dbf28517baf318a1
Message:b2/boom.c: add substitution query mode (option -q)

Files: b2/boom.c (2 diffs)

Change Details

b2/boom.c
1414#include <stdio.h>
1515#include <string.h>
1616
17#include "util.h"
1718#include "lang.h"
19#include "subex.h"
20
21
22static struct var *vars = NULL, **last_var = &vars;
23
24
25static 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
41static 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}
1851
1952
2053static void usage(const char *name)
2154{
2255    fprintf(stderr,
23"usage: %s file [[-type] file ...] ...\n\n"
56"usage: %s file [[-type] file ...] [-q var=value ...] ...\n\n"
2457" file types:\n"
2558" -c characteristics\n"
2659" -i inventory\n"
2760" -x currency exchange\n"
2861" -p providers\n"
2962" -s substitutions\n"
63" -q var=value ...\n"
3064    , name);
3165    exit(1);
3266}
...... 
3468
3569int main(int argc, char **argv)
3670{
37    void (*parse)(const char *name) = parse_hierarchy;
71    void (*process)(const char *name) = parse_hierarchy;
3872    int i;
3973
4074    for (i = 1; i != argc; i++) {
4175        if (*argv[i] == '-') {
4276            if (!strcmp(argv[i], "-c"))
43                parse = parse_characteristics;
77                process = parse_characteristics;
4478            else if (!strcmp(argv[i], "-i"))
45                parse = parse_inventory;
79                process = parse_inventory;
4680            else if (!strcmp(argv[i], "-x"))
47                parse = parse_currencies;
81                process = parse_currencies;
4882            else if (!strcmp(argv[i], "-p"))
49                parse = parse_providers;
83                process = parse_providers;
5084            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;
5288            else
5389                usage(*argv);
5490        } else {
55            parse(argv[i]);
91            process(argv[i]);
5692        }
5793    }
94    if (vars)
95        do_substitutions();
5896    return 0;
5997}

Archive Download the corresponding diff file

Branches:
master



interactive