-
Notifications
You must be signed in to change notification settings - Fork 17
/
cassette.sh
executable file
·128 lines (119 loc) · 2.72 KB
/
cassette.sh
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$
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) 0 $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