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