Add the DragonFly cvs id and perform general cleanups on cvs/rcs/sccs ids. Most
[dragonfly.git] / usr.bin / getconf / fake-gperf.awk
1 #!/usr/bin/awk -f
2 # $FreeBSD: src/usr.bin/getconf/fake-gperf.awk,v 1.2.2.1 2002/10/27 04:18:40 wollman Exp $
3 # $DragonFly: src/usr.bin/getconf/fake-gperf.awk,v 1.2 2003/06/17 04:29:27 dillon Exp $
4 BEGIN {
5   state = 0;
6   struct_seen = "";
7 }
8 /^%{$/ && state == 0 {
9   state = 1;
10   next;
11 }
12 /^%}$/ && state == 1 {
13   state = 0;
14   next;
15 }
16 state == 1 { print; next; }
17 /^struct/ && state == 0 {
18   print;
19   struct_seen = $2;
20   next;
21 }
22 /^%%$/ && state == 0 {
23   state = 2;
24   print "#include <stddef.h>";
25   print "#include <string.h>";
26   if (struct_seen !~ /^$/) {
27     print "static const struct", struct_seen, "wordlist[] = {";
28   } else {
29     print "static const struct map {";
30     print "\tconst char *name;";
31     print "\tint key;";
32     print "\tint valid;";
33     print "} wordlist[] = {";
34     struct_seen = "map";
35   }
36   next;
37 }
38 /^%%$/ && state == 2 {
39   state = 3;
40   print "\t{ NULL }";
41   print "};";
42   print "#define\tNWORDS\t(sizeof(wordlist)/sizeof(wordlist[0]) - 1)";
43   print "static const struct map *";
44   print "in_word_set(const char *word, unsigned int len)";
45   print "{";
46   print "\tconst struct", struct_seen, "*mp;";
47   print "";
48   print "\tfor (mp = wordlist; mp < &wordlist[NWORDS]; mp++) {";
49   print "\t\tif (strcmp(word, mp->name) == 0)";
50   print "\t\t\treturn (mp);";
51   print "\t}";
52   print "\treturn (NULL);";
53   print "}";
54   print "";
55   next;
56 }
57 state == 2 && NF == 2 {
58   name = substr($1, 1, length($1) - 1);
59   printf "#ifdef %s\n", $2;
60   printf "\t{ \"%s\", %s, 1 },\n", name, $2;
61   print "#else";
62   printf "\t{ \"%s\", 0, 0 },\n", name, $2;
63   print "#endif"
64   next;
65 }
66 state == 3 { print; next; }
67 {
68                                 # eat anything not matched.
69 }