1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
#!/bin/sh
# $Id: cassette.sh,v 1.4 2008/06/26 04:39:56 mann Exp $
arrayitem () {
INDEX=$1
shift
eval echo \$$INDEX;
}
arraycount () {
echo $#;
}
DONE=no
CONTROL_FILE=.cassette.ctl
DEFAULT_FORMAT=1
FORMAT_NAME='cas cpt wav direct debug'
if [ ! -e "$CONTROL_FILE" ]; then
echo Creating $CONTROL_FILE
echo "cassette.$(arrayitem $DEFAULT_FORMAT $FORMAT_NAME) 0 $DEFAULT_FORMAT" > \
$CONTROL_FILE
fi
while [ "$DONE" != "yes" ]; do
CONTROL=$(cat $CONTROL_FILE)
FILENAME=$(arrayitem 1 $CONTROL)
POSITION=$(arrayitem 2 $CONTROL)
if [ $(arraycount $CONTROL) -lt 3 ]; then
FORMAT=$DEFAULT_FORMAT
else
FORMAT=$(arrayitem 3 $CONTROL)
fi
if [ -e "$FILENAME" ]; then
ISNEW=
else
ISNEW=" (new)"
fi
echo
echo "Tape loaded: $FILENAME$ISNEW"
echo 'Type: '$(arrayitem $FORMAT $FORMAT_NAME)
echo 'Position: '$POSITION
echo
echo -n 'Command: '
read COMMAND
if [ $(arraycount $COMMAND) -lt 1 ]; then
COMMAND=help
fi
TOKEN1="$(arrayitem 1 $COMMAND)"
case $TOKEN1 in
pos) ;;
load|file)
if [ $(arraycount $COMMAND) -ne 2 ]; then
echo "Must specify a file name"
else
TOKEN2="$(arrayitem 2 $COMMAND)"
case $TOKEN2 in
*.cas|*.bin)
FORMAT=1 ;;
*.cpt)
FORMAT=2 ;;
*.wav)
FORMAT=3 ;;
/dev/dsp*)
FORMAT=4 ;;
*.debug)
FORMAT=5 ;;
*)
FORMAT=1 ;;
esac
echo "$(arrayitem 2 $COMMAND) $FORMAT" > $CONTROL_FILE
fi ;;
type)
if [ $(arraycount $COMMAND) -ne 2 ]; then
echo Types are:
echo ' '$FORMAT_NAME
else
TOKEN2="$(arrayitem 2 $COMMAND)"
case $TOKEN2 in
cas)
FORMAT=1 ;;
cpt)
FORMAT=2 ;;
wav)
FORMAT=3 ;;
direct)
FORMAT=4
FILENAME=/dev/dsp
POSITION=0 ;;
debug)
FORMAT=5 ;;
*)
echo Types are:
echo ' '$FORMAT_NAME ;;
esac
echo "$FILENAME $POSITION $FORMAT" > $CONTROL_FILE
fi ;;
rew)
if [ $(arraycount $COMMAND) -lt 2 ]; then
POSITION=0
else
POSITION=$(arrayitem 2 $COMMAND)
fi
echo "$FILENAME $POSITION $FORMAT" > $CONTROL_FILE ;;
ff)
if [ $(arraycount $COMMAND) -lt 2 ]; then
POSITION=$(wc -c $FILENAME)
else
POSITION=$(arrayitem 2 $COMMAND)
fi
echo "$FILENAME $POSITION $FORMAT" > $CONTROL_FILE ;;
quit|exit|done)
DONE=yes ;;
*)
echo Commands are:
echo ' 'pos
echo ' 'load filename
echo ' 'type {$FORMAT_NAME}
echo ' 'rew [position]
echo ' 'ff [position]
echo ' 'quit ;;
esac
done
exit
|