blob: c16f3f7bed5bd8a4c03293519e655842b43657bf (
plain)
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
#!/bin/sh
classify_source () {
NAME=$(basename $1 .c)
if grep -q "^REFERENCE(" $1; then
echo REFERENCE
elif grep -q "^#define ${NAME}[ (]" $1; then
echo MACRO
elif grep -q "#undef ${NAME}" $1; then
echo MACRO
elif grep -q '^typedef .*(\*' $1; then
echo FNTYPE
elif grep -q "^typedef .*${NAME}.*;" $1; then
echo TYPE
elif grep -q "^struct .*;$" $1; then
echo TYPE
elif grep -q "^typedef.*{$" $1; then
echo TYPE_LONG
elif grep -q "^struct.*{" $1; then
echo RECORD
elif grep -q "^union.*{" $1; then
echo RECORD
elif grep -q "^[A-Za-z_].*[ \*]${NAME}[[;]" $1; then
echo EXTERN
elif grep -q 'TGFN' $1; then
echo TGFN
else
echo FUNCTION
fi
}
version_guard () {
parsed=/tmp/$(basename $1).v
grep -F -e 'STDC(' -e 'POSIX(' -e 'XOPEN(' $1 | sort | m4 $(dirname $0)/ftm.m4 - | grep . > $parsed
lines=$(wc -l $parsed | cut -f1 -d' ')
if [ $lines -ne 0 ]; then
printf '#if'
loop=1
while [ $loop -lt $lines ]; do
printf '\t(%s) || \\\n' "$(sed -ne "${loop}p;q" $parsed)"
loop=$((loop + 1))
done
sed -ne "${loop}p;q" $parsed > /tmp/sed.out.${loop}
printf '\t(%s)\n' "$(sed -ne "${loop}p;q" $parsed)"
fi
rm -f $parsed
}
get_declaration () {
case ${2:-$(classify_source $1)} in
REFERENCE)
ref="$(grep -F 'REFERENCE(' $1 | m4 -DREFERENCE='$1')"
if (echo "$ref" | grep -q '<.*>'); then
echo "$ref"
else
get_declaration "src/${ref}"
fi
;;
MACRO)
grep -E '^(#(if|def|undef|el|end)| )' $1
;;
TYPE|TYPE_LONG|RECORD|FNTYPE)
if grep -q '^#if' $1; then
sed -ne '/^#if/,/#endif/p' $1
elif grep -qE '^(typedef|struct|union) .*{' $1; then
sed -ne '/{$/,/^}/p' $1
else
grep -E '^(typedef|struct|union) ' $1
fi
;;
EXTERN)
echo "extern $(grep '^[a-zA-Z_].*;$' $1)"
;;
FUNCTION)
echo "$(grep '^[a-zA-Z_].*)' $1 | head -n1);"
;;
TGFN)
echo "$(grep 'TGFN.*)$' $1 | m4 -DTGFN='$1' -DTYPE='double');"
echo "$(grep 'TGFN.*)$' $1 | m4 -DTGFN='$1f' -DTYPE='float');"
echo "$(grep 'TGFN.*)$' $1 | m4 -DTGFN='$1l' -DTYPE='long double');"
;;
*)
# unknown type, so try guessing
get_declaration $1
;;
esac
}
|