Subversion Repositories planix.SVN

Rev

Blame | Last modification | View Log | RSS feed


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