summaryrefslogtreecommitdiffstats
path: root/util/getdefs
diff options
context:
space:
mode:
Diffstat (limited to 'util/getdefs')
-rwxr-xr-xutil/getdefs27
1 files changed, 27 insertions, 0 deletions
diff --git a/util/getdefs b/util/getdefs
new file mode 100755
index 0000000..869dff6
--- /dev/null
+++ b/util/getdefs
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+set -e
+
+text="$(cat)"
+
+expr='\(0x[0-9a-fA-F]\+\|[0-9]\+\)[Ll]*[Uu]*[Ll]*'
+expr='\(\*\|\/\|[+~-]\|<<\|>>\)\?\s*'"$expr"
+expr='\('"$expr"'\|(\|)\)'
+expr='\s*\('"$expr"'\s*\)\+'
+
+filter () {
+ sed -n 's/^\s*#\s*define\s\+\('"$1"'\)\s\+\('"$expr"'\)\s*\(\/.*\)\?$/\1 \2/p'
+}
+
+if test $# = 0; then
+ printf '%s\n' "$text" | filter '[A-Z0-9_]\+'
+else
+ for prefix; do
+ printf '%s\n' "$text" | filter "$prefix"'_[A-Z0-9_]\+'
+ done
+fi | \
+while read name value; do
+ value="$(printf '%s\n' "$value" | tr -d ULul)"
+ value=$(printf '%s\n' "$(( $value ))" | cut -d . -f 1)
+ printf '%s %s\n' "$name" "$value"
+done