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