s/^\s*typedef\s+(struct\s+)?((\w+\**\s+)*)(\w+)\s*;.*$/typedef \1 \2 \4;/
t finish
s/^\s*typedef\s+(struct.*[^;].*)/typedef \1/
T
h
:loop
n
/^\s*\}/ ! b loop
s/^\s*\}\s*(\w+)\s*;.*$/\1;/
H;x
s/\n/ /g
:finish
s/ {2,}/ /g
p