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