xref: /plan9/sys/src/cmd/troff/cvt (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1
2awk '
3
4/^{/ {
5	if (prev != "") {
6		# comments can be trouble (e.g. ffree())
7		if ( (c = match(prev, /\/\*.*\*\/$/)) != 0 ) {
8			comment = substr(prev, c)
9			sub(/\/\*.*\*\/$/, "", prev)
10		} else comment = ""
11
12		x = prev
13
14		# isolate argument list
15		sub(/^[^(]*\(/, "", x)
16		sub(/\)[^)]*$/, "", x)
17
18		# find the names in it
19		n = split(x, args)
20		arglist = ""
21		for (i = 2; i <= n; i += 2)
22			arglist = arglist args[i]
23		gsub(/\(\*f\)\(Tchar\)/, "f", arglist)	# special case for n4.c
24		gsub(/\[[0-9]+\]/, "", arglist)		#     for n8.c
25		gsub(/[*()\[\]]/, "", arglist)		# discard noise characters *()[]
26		gsub(/,/, ", ", arglist)		# space nicely
27		sub(/\(.*\)/, "(" arglist ")", prev)	# reconstruct
28		print prev comment
29
30		# argument declarations
31		gsub(/,/, ";", x)
32		gsub(/\(\*f\)\(Tchar\)/, "(*f)()", x)	# special case for n4.c
33		if (x != "")
34			print "\t" x ";"
35	}
36	prev = $0
37	next
38}
39
40{	print prev
41	prev = $0
42}
43
44END { print prev }
45' $*
46