mkioctls revision 130617
1175936Sdesset -e
2175936Sdes
3175936Sdes# $FreeBSD: head/usr.bin/kdump/mkioctls 130617 2004-06-16 23:39:33Z mlaier $
4175936Sdes
540455Sbdeif [ "x$1" = "x-s" ]; then
640455Sbde	use_switch=1
754081Smarcel	shift
8226157Sdeselse
954081Smarcel	use_switch=0
1054081Smarcelfi
1154081Smarcel
1275261Sruif [ -z "$1" ]; then
1375261Sru	echo "usage: sh $0 [-s] include-dir"
1440455Sbde	exit 1
1516631Sbdefi
1640455Sbde
1754081SmarcelLC_ALL=C; export LC_ALL
18192901Sthompsa
1940455Sbde# Build a list of headers that have ioctls in them.
2064099Sru# XXX should we use an ANSI cpp?
2185796Sobrienioctl_includes=`
2240455Sbde	cd $1
2340455Sbde	find -H -s * -name '*.h' |
2485796Sobrien		xargs egrep -l \
25192768Sed'^#[ 	]*define[ 	]+[A-Za-z_][A-Za-z0-9_]*[ 	]+_IO[^a-z0-9_]' |
26226157Sdes		awk '{printf("#include <%s>\\\\n", $1)}'
271590Srgrimes`
2840455Sbde
2940455Sbdeawk -v x="$ioctl_includes" 'BEGIN {print x}' |
30191936Sed	gcc -E -I$1 -dM - |
311590Srgrimes	awk -v ioctl_includes="$ioctl_includes" -v use_switch="$use_switch" '
3240455SbdeBEGIN {
3340455Sbde	print "/* XXX obnoxious prerequisites. */"
341590Srgrimes	print "#define COMPAT_43"
3520287Swollman	print "#include <sys/param.h>"
3640455Sbde	print "#include <sys/devicestat.h>"
37159247Srwatson	print "#include <sys/disklabel.h>"
3864121Sru	print "#include <sys/socket.h>"
3940455Sbde	print "#include <sys/time.h>"
4040455Sbde	print "#include <sys/tty.h>"
41130617Smlaier	print "#include <net/ethernet.h>"
421590Srgrimes	print "#include <net/if.h>"
4316631Sbde	print "#include <net/if_var.h>"
4452130Speter	print "#include <net/pfvar.h>"
4562585Sitojun	print "#include <net/route.h>"
4662585Sitojun	print "#include <netatm/atm.h>"
4762585Sitojun	print "#include <netatm/atm_if.h>"
4874840Sken	print "#include <netatm/atm_sap.h>"
4940455Sbde	print "#include <netatm/atm_sys.h>"
501590Srgrimes	print "#include <netinet/in.h>"
51226157Sdes	print "#include <netinet/ip_mroute.h>"
5293522Sdwmalone	print "#include <netinet6/in6_var.h>"
5340455Sbde	print "#include <netinet6/nd6.h>"
5440455Sbde	print "#include <netinet6/ip6_mroute.h>"
55226157Sdes	print "#include <stdio.h>"
56226157Sdes	print "#include <cam/cam.h>"
571590Srgrimes	print ""
58226157Sdes	print "const char *ioctlname(u_long val);"
591590Srgrimes	print ""
601590Srgrimes	print ioctl_includes
611590Srgrimes	print ""
6240455Sbde	print "const char *"
63175936Sdes	print "ioctlname(u_long val)"
641590Srgrimes	print "{"
651590Srgrimes	print ""
661590Srgrimes	if (use_switch)
671590Srgrimes		print "\tswitch(val) {"
681590Srgrimes}
69175936Sdes
70226157Sdes/^#[ 	]*define[ 	]+[A-Za-z_][A-Za-z0-9_]*[ 	]+_IO/ {
71226157Sdes	
72226157Sdes	# find where the name starts
73226157Sdes	for (i = 1; i <= NF; i++)
74226157Sdes		if ($i ~ /define/)
751590Srgrimes			break;
761590Srgrimes	++i;
77226157Sdes	# 
78226157Sdes	if (use_switch)
79226157Sdes		printf("\tcase %s:\n\t\treturn(\"%s\");\n", $i, $i);
80226157Sdes	else
81226157Sdes		printf("\tif (val ==  %s)\n\t\treturn(\"%s\");\n", $i, $i);
82226157Sdes
83226157Sdes}
841590SrgrimesEND {
851590Srgrimes	if (use_switch)
8616631Sbde		print "\t}"
87	print "\n\treturn(NULL);"
88	print "}"
89}
90'
91