#!/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"

}
