#!/bin/sh duration=300 magic=/usr/share/misc/magic-mm dsp_progs=$(cat ~mats/.dsprc) kill_mmwrapper() { local pst pids p sig pst=$(ps xao pid,command | \ egrep '^ *[0-9]+ /bin/sh .*(mmwrapper|play_sid|play_ym)') if [ -n "$pst" ]; then pids=$(echo "$pst" | sed -E 's/^ *([0-9]+).*$/\1/') for p in $pids; do if [ $p -ne $$ ]; then kill $p; fi done fi for p in $dsp_progs; do sig=; if [ "$p" = "mplayer" ]; then sig="-9"; fi killall $sig $p done nawk 'BEGIN { while(("chkdsp /dev/dsp" | getline) > 0) { if ($0 == 1) break } }' mixer pcm 76 } do_file() { local f ts t i pid f=$1 ts="$(file -m $magic "$f")"; t="${ts#*: }" case "$t" in LHa\ * | LHarc\ *) if [ -z "$tmpfile" ]; then cmd=$(basename $0) tmpfile=$(mktemp ~/.$cmd.XXXXXX) || exit 1 fi lha pq "$1" > $tmpfile f=$tmpfile;; esac ts="$(file -m $magic "$f")"; t="${ts#*: }" case "$t" in YM2149\ *) stsoundc "$f" & pid=$! i=0; while [ $i -lt $duration ]; do sleep 1; i=$(($i + 1)); done kill $pid nawk 'BEGIN { while(("chkdsp /dev/dsp" | getline) > 0) { if ($0 == 1) break } }';; esac } cleanup() { rm -f $tmpfile if [ -n "$pid" ]; then kill $pid fi exit } trap '' 1 trap 'cleanup' 2 3 15 exec >/dev/null 2>&1 kill_mmwrapper if [ -d "$1" ]; then IFS=" " for f in $(find "$1" -type f); do do_file "$f" done else do_file "$1" fi cleanup .