blob: 75bf885bc09c4acf520504b6221522c7542a3db5 (
plain) (
tree)
|
|
#!/bin/sh -e
format="$1"
shift 1
prefix="$(
printf '%s\\|' "$@" |
sed 's/..$//'
)"
definitions_with_max="$(
sed -n 's/^\s*#\s*define\s\+\(\('"$prefix"'\)_[A-Za-z0-9_]*\)\s\+\(0[xX][0-9A-Fa-f]\+\|[0-9]\+\)\(.*\)$/\3 \1/p'
)"
definitions="$(
printf '%s\n' "$definitions_with_max" |
sed '/ \('"$prefix"'\)_MAX$/d'
)"
max=$(
printf '%u\n' $(
printf '%s\n' "$definitions_with_max" |
sed -n 's/^\(.*\) \('"$prefix"'\)_MAX$/\1/p'
)
)
nonunique="$(
printf '%s\n' "$definitions" |
while read num name; do
printf '0x%08X\n' $num
done |
sort |
uniq -d
)"
printf '%s\n' "$definitions" |
while read line; do
printf '0x%08X %s\n' $line
done |
(
prefixed="$(cat)"
printf '%s\n' "$prefixed" |
sed '/^\('"$(printf '%s\\|' $nonunique | sed 's/..$/\n/')"'abcdef\) /d'
last_num=x
last_name=x
printf '%s\n' "$prefixed" |
sed -n 's/^\('"$(printf '%s\\|' $nonunique | sed 's/..$/\n/')"'\) .*$/&/p' |
while read num name; do
num=$(printf '0x%08X\n' $num)
if ! test $last_num = $num && ! test $last_num = x; then
printf '%s %s\n' $last_num $last_name
fi
last_num=$num
last_name=$name
done
if ! test $last_num = x; then
printf '%s %s\n' $last_num $last_name
fi
) |
sort |
while read num name; do
printf '%s %u\n' $name $num;
done |
uniq -f 1 |
awk '
BEGIN {num = 0}
{
while ($2 != num) {
printf "\"'"$format"'\",\n", num
num += 1
}
printf "\"%s\",\n", $1
num += 1
}
END {
while (num <= '"$max"') {
printf "\"'"$format"'\",\n", num
num += 1
}
}' |
sed '$s/,$//'
|