mas01cr@48: # no shebang line: this file should be sourced by run-test.sh files mas01cr@48: mas01cr@48: trap "exit 1" ERR mas01cr@48: mas01cr@48: if [ -z ${AUDIODB} ]; then mas01cr@48: AUDIODB=../../audioDB mas01cr@48: fi mas01cr@48: mas01cr@48: # FIXME: maybe generalize to multiple arguments? Also, implement it mas01cr@48: # properly, rather than just for a few floats that we know how to mas01cr@48: # encode. This might involve writing some C code, as Bash doesn't do mas01cr@48: # Floating Point. (scanf() is probably enough). mas01cr@48: mas01cr@54: expect_clean_error_exit() { mas01cr@54: trap - ERR mas01cr@54: "$@" mas01cr@54: exit_code=$? mas01cr@54: trap "exit 1" ERR mas01cr@54: if [ $exit_code -eq 0 ]; then mas01cr@54: exit 1 mas01cr@54: elif [ $exit_code -ge 126 ]; then mas01cr@54: exit 1 mas01cr@54: fi mas01cr@54: } mas01cr@54: mas01cr@48: floatstring() { mas01cr@48: for arg in "$@"; do mas01cr@48: case ${arg} in mas01cr@48: 0) mas01cr@48: printf "\x00\x00\x00\x00\x00\x00\x00\x00";; mas01cr@48: 0.5) mas01cr@48: printf "\x00\x00\x00\x00\x00\x00\xe0\x3f";; mas01cr@48: 1) mas01cr@48: printf "\x00\x00\x00\x00\x00\x00\xf0\x3f";; mas01cr@48: *) mas01cr@48: echo "bad arg to floatstring(): ${arg}" mas01cr@48: exit 1;; mas01cr@48: esac mas01cr@48: done mas01cr@48: } mas01cr@48: mas01cr@48: # FIXME: likewise. And endianness issues (which are a reflection of mas01cr@48: # the endianness of audioDB as of 2007-09-18, unfortunately). mas01cr@48: mas01cr@48: intstring() { mas01cr@48: # works up to 9 for now mas01cr@48: if [ $1 -ge 10 ]; then echo "intstring() arg too large: ${1}"; exit 1; fi mas01cr@48: printf "%b\x00\x00\x00" "\\x${1}" mas01cr@48: }