cvt - 9base - revived minimalist port of Plan 9 userland to Unix
(HTM) git clone git://git.suckless.org/9base
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
cvt (938B)
---
1
2 awk '
3
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 = ""
11
12 x = prev
13
14 # isolate argument list
15 sub(/^[^(]*\(/, "", x)
16 sub(/\)[^)]*$/, "", x)
17
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
29
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 }
39
40 { print prev
41 prev = $0
42 }
43
44 END { print prev }
45 ' $*