#!/bin/sh # See LICENSE file for copyright and license details. set -e text="$(cat)" expr='\(0x[0-9a-fA-F]\{1,\}\|[0-9]\{1,\}\)[Ll]*[Uu]*[Ll]*' expr='\(\*\|\/\|[+~-]\|<<\|>>\)\{0,1\}[[:space:]]*'"$expr" expr='\('"$expr"'\|(\|)\)' expr='[[:space:]]*\('"$expr"'[[:space:]]*\)\{1,\}' filter () { sed -n 's/^[[:space:]]*#[[:space:]]*define[[:space:]]\{1,\}\('"$1"'\)[[:space:]]\{1,\}\('"$expr"'\)[[:space:]]*\(\/.*\)\{0,1\}$/\1 \2/p' } if test $# = 0; then printf '%s\n' "$text" | filter '[A-Z0-9_]\{1,\}' else for prefix; do printf '%s\n' "$text" | filter "$prefix"'_[A-Z0-9_]\{1,\}' 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