45 lines · 938 B · Text
RawDownload
 awk ' /^{/ {	if (prev != "") {		# comments can be trouble (e.g. ffree())		if ( (c = match(prev, /\/\*.*\*\/$/)) != 0 ) {			comment = substr(prev, c)			sub(/\/\*.*\*\/$/, "", prev)		} else comment = "" 		x = prev 		# isolate argument list		sub(/^[^(]*\(/, "", x)		sub(/\)[^)]*$/, "", x) 		# find the names in it		n = split(x, args)		arglist = ""		for (i = 2; i <= n; i += 2)			arglist = arglist args[i]		gsub(/\(\*f\)\(Tchar\)/, "f", arglist)	# special case for n4.c		gsub(/\[[0-9]+\]/, "", arglist)		#     for n8.c		gsub(/[*()\[\]]/, "", arglist)		# discard noise characters *()[]		gsub(/,/, ", ", arglist)		# space nicely		sub(/\(.*\)/, "(" arglist ")", prev)	# reconstruct		print prev comment 		# argument declarations		gsub(/,/, ";", x)		gsub(/\(\*f\)\(Tchar\)/, "(*f)()", x)	# special case for n4.c		if (x != "")			print "\t" x ";"	}	prev = $0	next} {	print prev	prev = $0} END { print prev }' $*