-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcastfmt.awk
More file actions
46 lines (46 loc) · 1.3 KB
/
Copy pathcastfmt.awk
File metadata and controls
46 lines (46 loc) · 1.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!awk -f
# void(*foo) (a, b, c)
function trim( s, v ) {
v = s
sub( /^[ \t]*/, "", v )
sub( /[ \t]*$/, "", v )
return( v )
}
BEGIN {
# re = "[a-zA-Z_][a-zA-Z0-9_]*[ \t]*[(][^)]*[)][ \t]*[(].*[)];.*$"
re = "[a-zA-Z_][a-zA-Z0-9_]*[ \t]*[(][^)]*[)][ \t]*[(][^)]*[)]"
}
{
line = ""
while( match( $0, re ) > 0 ) {
# printf "clip=|%s|\n", substr( $0, RSTART, RLENGTH )
left = line substr( $0, 1, RSTART - 1 )
mid = substr( $0, RSTART, RLENGTH )
$0 = substr( $0, RSTART + RLENGTH )
# DEBUG printf "%s|%s|%s\n", line, mid, $0
#
# Everything up to first lparen is the type
match( mid, /[(]/ )
type = trim( substr( mid, 1, RSTART - 1 ) )
mid = substr( mid, RSTART )
# Everything before second lparens is the name
match( mid, /[(][^)]*[)][ \t]*/ )
name = trim( substr( mid, RSTART, RLENGTH ) )
args = substr( mid, RSTART + RLENGTH )
Ltype = length( type )
if( Ltype < n ) {
filler = n - Ltype
pad = sprintf( "%" filler "." filler "s", " " )
}
# Clean up stuff
sub( /[(][ \t]*/, "(", name )
sub( /[ \t]*[)][ \t]*/, ")", name )
sub( /[(][ \t]*/, "(", args )
sub( /[ \t]*[)][ \t]*/, ")", args )
#
cast = type pad name args
#
line = line left cast
}
print line $0
}