File: cassette.sh

package info (click to toggle)
xtrs 4.9d-2.1
  • links: PTS
  • area: contrib
  • in suites: forky, sid, trixie
  • size: 5,480 kB
  • sloc: ansic: 72,545; makefile: 1,633; sh: 554; csh: 132
file content (128 lines) | stat: -rwxr-xr-x 2,837 bytes parent folder | download | duplicates (2)
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