Blob


2 awk '
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 = ""
12 x = prev
14 # isolate argument list
15 sub(/^[^(]*\(/, "", x)
16 sub(/\)[^)]*$/, "", x)
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
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 }
40 { print prev
41 prev = $0
42 }
44 END { print prev }
45 ' $*