]>
Commit | Line | Data |
---|---|---|
7d30490e WD |
1 | #!/usr/bin/awk -f |
2 | ||
3 | # The caller must pass arg: daemon-parm.txt | |
4 | # The resulting code is output into daemon-parm.h | |
5 | ||
6 | BEGIN { | |
cb383673 | 7 | heading = "/* DO NOT EDIT THIS FILE! It is auto-generated from a list of values in " ARGV[1] "! */\n\n" |
7d30490e | 8 | sect = psect = defines = accessors = prior_ptype = "" |
cb383673 | 9 | parms = "\nstatic struct parm_struct parm_table[] = {" |
d88db22a | 10 | comment_fmt = "\n/********** %s **********/\n" |
7d30490e WD |
11 | tdstruct = "typedef struct {" |
12 | } | |
13 | ||
14 | /^\s*$/ { next } | |
15 | /^#/ { next } | |
16 | ||
17 | /^Globals:/ { | |
18 | if (defines != "") { | |
19 | print "The Globals section must come first!" | |
20 | defines = "" | |
21 | exit | |
22 | } | |
23 | defines = tdstruct | |
0add026a | 24 | values = "\nstatic const all_vars Defaults = {\n { /* Globals: */\n" |
d88db22a | 25 | exps = exp_values = sprintf(comment_fmt, "EXP") |
7d30490e WD |
26 | sect = "GLOBAL" |
27 | psect = ", P_GLOBAL, &Vars.g." | |
28 | next | |
29 | } | |
30 | ||
31 | /^Locals:/ { | |
32 | if (sect == "") { | |
33 | print "The Locals section must come after the Globals!" | |
34 | exit | |
35 | } | |
36 | defines = defines exps "} global_vars;\n\n" tdstruct | |
37 | values = values exp_values "\n }, { /* Locals: */\n" | |
d88db22a | 38 | exps = exp_values = sprintf(comment_fmt, "EXP") |
7d30490e WD |
39 | sect = "LOCAL" |
40 | psect = ", P_LOCAL, &Vars.l." | |
41 | next | |
42 | } | |
43 | ||
565cde84 | 44 | /^(STRING|CHAR|PATH|INTEGER|ENUM|OCTAL|BOOL|BOOLREV|BOOL3)[ \t]/ { |
7d30490e WD |
45 | ptype = $1 |
46 | name = $2 | |
47 | $1 = $2 = "" | |
48 | sub(/^[ \t]+/, "") | |
49 | ||
50 | if (ptype != prior_ptype) { | |
d88db22a WD |
51 | comment = sprintf(comment_fmt, ptype) |
52 | defines = defines comment | |
53 | values = values comment | |
cb383673 | 54 | parms = parms "\n" |
7d30490e WD |
55 | accessors = accessors "\n" |
56 | prior_ptype = ptype | |
57 | } | |
58 | ||
59 | if (ptype == "STRING" || ptype == "PATH") { | |
60 | atype = "STRING" | |
61 | vtype = "char*" | |
565cde84 | 62 | } else if (ptype ~ /BOOL/) { |
7d30490e | 63 | atype = vtype = "BOOL" |
d88db22a WD |
64 | } else if (ptype == "CHAR") { |
65 | atype = "CHAR" | |
66 | vtype = "char" | |
7d30490e WD |
67 | } else { |
68 | atype = "INTEGER" | |
69 | vtype = "int" | |
70 | } | |
71 | ||
c83a81ca WD |
72 | # The name might be var_name|public_name |
73 | pubname = name | |
74 | sub(/\|.*/, "", name) | |
75 | sub(/.*\|/, "", pubname) | |
76 | gsub(/_/, " ", pubname) | |
77 | gsub(/-/, "", name) | |
7d30490e WD |
78 | |
79 | if (ptype == "ENUM") | |
80 | enum = "enum_" name | |
81 | else | |
82 | enum = "NULL" | |
83 | ||
84 | defines = defines "\t" vtype " " name ";\n" | |
85 | values = values "\t" $0 ", /* " name " */\n" | |
cb383673 | 86 | parms = parms " {\"" pubname "\", P_" ptype psect name ", " enum ", 0},\n" |
7d30490e WD |
87 | accessors = accessors "FN_" sect "_" atype "(lp_" name ", " name ")\n" |
88 | ||
89 | if (vtype == "char*") { | |
90 | exps = exps "\tBOOL " name "_EXP;\n" | |
91 | exp_values = exp_values "\tFalse, /* " name "_EXP */\n" | |
92 | } | |
93 | ||
94 | next | |
95 | } | |
96 | ||
97 | /./ { | |
98 | print "Extraneous line:" $0 | |
99 | defines = "" | |
100 | exit | |
101 | } | |
102 | ||
103 | END { | |
104 | if (sect != "" && defines != "") { | |
105 | defines = defines exps "} local_vars;\n\n" | |
106 | defines = defines tdstruct "\n\tglobal_vars g;\n\tlocal_vars l;\n} all_vars;\n" | |
107 | values = values exp_values "\n }\n};\n\nstatic all_vars Vars;\n" | |
cb383673 WD |
108 | parms = parms "\n {NULL, P_BOOL, P_NONE, NULL, NULL, 0}\n};\n" |
109 | print heading defines values parms accessors > "daemon-parm.h" | |
7d30490e WD |
110 | } else { |
111 | print "Failed to parse the data in " ARGV[1] | |
112 | exit 1 | |
113 | } | |
114 | } |