fake-gperf.awk revision 103591
1103516Swollman#!/usr/bin/awk -f 2103516Swollman# $FreeBSD: head/usr.bin/getconf/fake-gperf.awk 103591 2002-09-19 03:39:03Z wollman $ 3103516SwollmanBEGIN { 4103516Swollman state = 0; 5103591Swollman struct_seen = ""; 6103516Swollman} 7103516Swollman/^%{$/ && state == 0 { 8103516Swollman state = 1; 9103516Swollman next; 10103516Swollman} 11103516Swollman/^%}$/ && state == 1 { 12103516Swollman state = 0; 13103516Swollman next; 14103516Swollman} 15103516Swollmanstate == 1 { print; next; } 16103591Swollman/^struct/ && state == 0 { 17103591Swollman print; 18103591Swollman struct_seen = $2; 19103591Swollman next; 20103591Swollman} 21103516Swollman/^%%$/ && state == 0 { 22103516Swollman state = 2; 23103516Swollman print "#include <stddef.h>"; 24103516Swollman print "#include <string.h>"; 25103591Swollman if (struct_seen !~ /^$/) { 26103591Swollman print "static const struct", struct_seen, "wordlist[] = {"; 27103591Swollman } else { 28103591Swollman print "static const struct map {"; 29103591Swollman print "\tconst char *name;"; 30103591Swollman print "\tint key;"; 31103591Swollman print "\tint valid;"; 32103591Swollman print "} wordlist[] = {"; 33103591Swollman struct_seen = "map"; 34103591Swollman } 35103516Swollman next; 36103516Swollman} 37103516Swollman/^%%$/ && state == 2 { 38103516Swollman state = 3; 39103516Swollman print "\t{ NULL }"; 40103516Swollman print "};"; 41103591Swollman print "#define\tNWORDS\t(sizeof(wordlist)/sizeof(wordlist[0]) - 1)"; 42103516Swollman print "static const struct map *"; 43103516Swollman print "in_word_set(const char *word, unsigned int len)"; 44103516Swollman print "{"; 45103591Swollman print "\tconst struct", struct_seen, "*mp;"; 46103516Swollman print ""; 47103516Swollman print "\tfor (mp = wordlist; mp < &wordlist[NWORDS]; mp++) {"; 48103516Swollman print "\t\tif (strcmp(word, mp->name) == 0)"; 49103516Swollman print "\t\t\treturn (mp);"; 50103516Swollman print "\t}"; 51103516Swollman print "\treturn (NULL);"; 52103516Swollman print "}"; 53103516Swollman print ""; 54103516Swollman next; 55103516Swollman} 56103516Swollmanstate == 2 && NF == 2 { 57103516Swollman name = substr($1, 1, length($1) - 1); 58103591Swollman printf "#ifdef %s\n", $2; 59103591Swollman printf "\t{ \"%s\", %s, 1 },\n", name, $2; 60103591Swollman print "#else"; 61103591Swollman printf "\t{ \"%s\", 0, 0 },\n", name, $2; 62103591Swollman print "#endif" 63103516Swollman next; 64103516Swollman} 65103516Swollmanstate == 3 { print; next; } 66103516Swollman{ 67103516Swollman # eat anything not matched. 68103516Swollman} 69