|  | 
 | 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 } | 
 | ' $* |