aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/troff/cvt
blob: 3426d626676923632f3d5ee921746a5a77c25af7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

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