1175936Sdes#!/bin/sh
2175936Sdes#
3175936Sdes# $FreeBSD: releng/10.3/usr.bin/kdump/mkioctls 291815 2015-12-04 18:59:20Z bdrewery $
4226608Sdes#
5226608Sdes# When editing this script, keep in mind that truss also uses it.
6226608Sdes#
7175936Sdes
840455Sbdeset -e
940455Sbde
10226608Sdesif [ $# -ne 2 -o \( $1 != "print" -a $1 != "return" \) ]; then
11226608Sdes	echo "usage: sh $0 print|return include-dir"
1254081Smarcel	exit 1
1354081Smarcelfi
1454081Smarcel
15226608Sdesstyle="$1"
16226608Sdesincludedir="$2"
17226608Sdes
1875261SruLC_ALL=C; export LC_ALL
1975261Sru
2040455Sbde# Build a list of headers that have ioctls in them.
2116631Sbde# XXX should we use an ANSI cpp?
22226344Sdesioctl_includes=$(
23226608Sdes	cd $includedir
24263086Sglebius	find -H -s * -name '*.h' | \
25263086Sglebius	egrep -v '(.*disk.*|net/pfvar|net/if_pfsync)\.h' | \
2640455Sbde		xargs egrep -l \
2764099Sru'^#[ 	]*define[ 	]+[A-Za-z_][A-Za-z0-9_]*[ 	]+_IO[^a-z0-9_]' |
28226344Sdes		awk '{printf("#include <%s>\\n", $1)}'
29226344Sdes)
3040455Sbde
31226344Sdes: ${MACHINE=$(uname -m)}
32226344Sdescase "${MACHINE}" in
33226329Sdes*pc98*)
34226329Sdes	ioctl_includes="$ioctl_includes#include <sys/diskpc98.h>\\n"
35226329Sdes	;;
36226329Sdes*)
37226329Sdes	ioctl_includes="$ioctl_includes#include <sys/diskmbr.h>\\n"
38226329Sdes	;;
39226329Sdesesac
40226329Sdes
4185796Sobrienawk -v x="$ioctl_includes" 'BEGIN {print x}' |
42291815Sbdrewery	$CPP -nostdinc -I$1 -dM -DCOMPAT_43TTY - |
43226608Sdes	awk -v ioctl_includes="$ioctl_includes" -v style="$style" '
441590SrgrimesBEGIN {
4540455Sbde	print "/* XXX obnoxious prerequisites. */"
4640455Sbde	print "#define COMPAT_43"
47191936Sed	print "#define COMPAT_43TTY"
481590Srgrimes	print "#include <sys/param.h>"
4940455Sbde	print "#include <sys/devicestat.h>"
5040455Sbde	print "#include <sys/disklabel.h>"
511590Srgrimes	print "#include <sys/socket.h>"
5220287Swollman	print "#include <sys/time.h>"
5340455Sbde	print "#include <sys/tty.h>"
54159247Srwatson	print "#include <bsm/audit.h>"
5564121Sru	print "#include <net/ethernet.h>"
5640455Sbde	print "#include <net/if.h>"
5740455Sbde	print "#include <net/if_var.h>"
58263086Sglebius	print "#ifdef PF"
59130617Smlaier	print "#include <net/pfvar.h>"
60263086Sglebius	print "#include <net/if_pfsync.h>"
61263086Sglebius	print "#endif"
621590Srgrimes	print "#include <net/route.h>"
6316631Sbde	print "#include <netinet/in.h>"
6452130Speter	print "#include <netinet/ip_mroute.h>"
6562585Sitojun	print "#include <netinet6/in6_var.h>"
6662585Sitojun	print "#include <netinet6/nd6.h>"
6762585Sitojun	print "#include <netinet6/ip6_mroute.h>"
6874840Sken	print "#include <stdio.h>"
6940455Sbde	print "#include <cam/cam.h>"
70235911Smav	print "#include <stddef.h>"
71235911Smav	print "#include <stdint.h>"
721590Srgrimes	print ""
7340455Sbde	print ioctl_includes
7440455Sbde	print ""
75226608Sdes	if (style == "print") {
76226608Sdes		print "void ioctlname(unsigned long val, int decimal);"
77226608Sdes		print ""
78226608Sdes		print "void"
79226608Sdes		print "ioctlname(unsigned long val, int decimal)"
80226608Sdes	} else {
81226608Sdes		print "const char *ioctlname(unsigned long val);"
82226608Sdes		print ""
83226608Sdes		print "const char *"
84226608Sdes		print "ioctlname(unsigned long val)"
85226608Sdes	}
861590Srgrimes	print "{"
87226157Sdes	print "\tconst char *str = NULL;"
881590Srgrimes	print ""
891590Srgrimes}
901590Srgrimes
9140455Sbde/^#[ 	]*define[ 	]+[A-Za-z_][A-Za-z0-9_]*[ 	]+_IO/ {
92175936Sdes
931590Srgrimes	# find where the name starts
941590Srgrimes	for (i = 1; i <= NF; i++)
951590Srgrimes		if ($i ~ /define/)
961590Srgrimes			break;
971590Srgrimes	++i;
98175936Sdes	#
99226608Sdes	printf("\t");
100226157Sdes	if (n++ > 0)
101226608Sdes		printf("else ");
102226157Sdes	printf("if (val == %s)\n", $i);
103226157Sdes	printf("\t\tstr = \"%s\";\n", $i);
1041590Srgrimes}
1051590SrgrimesEND {
106226608Sdes	print ""
107226608Sdes	if (style == "print") {
108226608Sdes		print "\tif (str != NULL)"
109226608Sdes		print "\t\tprintf(\"%s\", str);"
110226608Sdes		print "\telse if (decimal)"
111226608Sdes		print "\t\tprintf(\"%lu\", val);"
112226608Sdes		print "\telse"
113226608Sdes		print "\t\tprintf(\"%#lx\", val);"
114226608Sdes	} else {
115226608Sdes		print "\treturn (str);"
116226608Sdes	}
1171590Srgrimes	print "}"
1181590Srgrimes}
11916631Sbde'
120