fake-gperf.awk revision 103516
1103516Swollman#!/usr/bin/awk -f
2103516Swollman#
3103516Swollman# This file is in the public domain.  Written by Garrett A. Wollman,
4103516Swollman# 2002-09-17.
5103516Swollman#
6103516Swollman# $FreeBSD: head/usr.bin/getconf/fake-gperf.awk 103516 2002-09-18 03:15:25Z wollman $
7103516Swollman#
8103516SwollmanBEGIN {
9103516Swollman  state = 0;
10103516Swollman}
11103516Swollman/^%{$/ && state == 0 {
12103516Swollman  state = 1;
13103516Swollman  next;
14103516Swollman}
15103516Swollman/^%}$/ && state == 1 {
16103516Swollman  state = 0;
17103516Swollman  next;
18103516Swollman}
19103516Swollmanstate == 1 { print; next; }
20103516Swollman/^%%$/ && state == 0 {
21103516Swollman  state = 2;
22103516Swollman  print "#include <stddef.h>";
23103516Swollman  print "#include <string.h>";
24103516Swollman  print "static const struct map {";
25103516Swollman  print "\tconst char *name;";
26103516Swollman  print "\tint key;";
27103516Swollman  print "} wordlist[] = {";
28103516Swollman  next;
29103516Swollman}
30103516Swollman/^%%$/ && state == 2 {
31103516Swollman  state = 3;
32103516Swollman  print "\t{ NULL }";
33103516Swollman  print "};";
34103516Swollman  print "#define\tNWORDS\t(sizeof(wordlist)/sizeof(wordlist[0]))";
35103516Swollman  print "static const struct map *";
36103516Swollman  print "in_word_set(const char *word, unsigned int len)";
37103516Swollman  print "{";
38103516Swollman  print "\tconst struct map *mp;";
39103516Swollman  print "";
40103516Swollman  print "\tfor (mp = wordlist; mp < &wordlist[NWORDS]; mp++) {";
41103516Swollman  print "\t\tif (strcmp(word, mp->name) == 0)";
42103516Swollman  print "\t\t\treturn (mp);";
43103516Swollman  print "\t}";
44103516Swollman  print "\treturn (NULL);";
45103516Swollman  print "}";
46103516Swollman  print "";
47103516Swollman  next;
48103516Swollman}
49103516Swollmanstate == 2 && NF == 2 {
50103516Swollman  name = substr($1, 1, length($1) - 1);
51103516Swollman  printf "\t{ \"%s\", %s },\n", name, $2;
52103516Swollman  next;
53103516Swollman}
54103516Swollmanstate == 3 { print; next; }
55103516Swollman{
56103516Swollman				# eat anything not matched.
57103516Swollman}
58