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