ctoman revision d0be1e954bd4674fc27f2616c72adb37cf3525a2
#!/usr/bin/gawk -f
#
# Copyright (C) 2000 Internet Software Consortium.
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
# ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
# CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
# DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
# PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
# SOFTWARE.
# $Id: ctoman,v 1.3 2000/06/22 00:52:07 tale Exp $
#
# ctoman - an awk program that makes a passable job of
# converting ISC BIND9 C files into template
# man pages
# Author: Jim Reid 1/6/00
#
BEGIN { quote = "\""
ftc = inc = fnc = arc = 1 }
# skip typedefs
/typedef/ { next }
# skip initialisations: lines ending in a semicolon
$0 ~ /;$/ { next }
# function return types
/^[a-z]/ && $0 !~ /\(/ { functypes[ftc++] = $0 }
# #include lines
/#include/ { while ((NF ==0) || ((NF > 0) && $0 ~ /#include/)) {
inclist[inc++] = $0
getline
}
}
# function names and argument prototypes
/^[a-z]/ && $0 ~ /\(/ {
str= $0
while ($NF != "{" ) {
next
str += $0
}
sub(/\(/, ":", str)
sub(/\).*{/, "", str)
gsub(/,./, ":", str)
arglist[arc++] = str
split(str, foo, ":")
funclist[fnc++] = foo[1]
}
#END { for (i = 1; i < inc; i++) print i, inclist[i] }
END {
while (getline < "/home/jim/bind9/doc/comment")
print
if (ftc != fnc)
print "FUNCTION NAME/RETURN COUNT MISMATCH"
for (i = 1; i < fnc - 1; i++)
print ".Nm", funclist[i], ","
print ".Nm", funclist[fnc - 1]
print ".Nd XXX"
print ".Sh SYNOPSIS"
for (i = 1; i < inc; i++)
print ".Fd", inclist[i]
for (i = 1; i < fnc; i++ ) {
print ".Ft", functypes[i]
print ".Fo", funclist[i]
j = split(arglist[i], foo, ":")
for (k = 2; k <= j; k++)
print ".Fa", quote foo[k] quote
print ".Fc"
}
print ".Sh DESCRIPTION"
print ".Sh RETURN VALUES"
print ".Sh SEE ALSO"
print ".Sh BUGS"
}