# TMP1FILE=/tmp/$$a.c TMP2FILE=/tmp/$$b.c OUTFILE=linux_ioctl.c CPP="/compat/linux/usr/bin/gcc -E -D__builtin_va_list=int" (echo "#include " echo "#include " ) > $TMP1FILE $CPP -dM $TMP1FILE | awk ' BEGIN { print "#include " print "#include " print "#include " print "#include " print "" print "char *" print "ioctlname(val)" print "{" print "" } /^#[ ]*define[ ]*(TIO|FIO|SIO|OSIO|SNDCTL)[A-Z_]*[ ]*_IO/ { # find where the name starts for (i = 1; i <= NF; i++) if ($i ~ /define/) break; ++i; # printf("%s\n", $0); printf("\tif (val == %s)\n\t\treturn(\"%s\");\n", $i, $i); } /^#[ ]*define[ ]*(TIO|FIO|SIO|OSIO|SNDCTL)[A-Z_]*[ ]*0x/ { # find where the name starts for (i = 1; i <= NF; i++) if ($i ~ /define/) break; ++i; # printf("%s\n", $0); printf("\tif (val == %s)\n\t\treturn(\"%s\");\n", $i, $i); } END { print "\n\treturn(NULL);" print "}" } ' > $TMP2FILE $CPP $TMP2FILE > $OUTFILE rm $TMP1FILE rm $TMP2FILE