|
|
1.1 root 1: #!/bin/sh
2:
3: # argument checks
1.1.1.3 root 4: if [ $# -lt 1 ] || [ \! -z "$(echo $1|tr -d 0-9)" ] || [ $1 -lt 2 ] || [ $1 -gt 16 ]; then
1.1.1.2 root 5: echo "Usage: ${0##*/} <Hatari instances, 2-16> [extra Hatari args]"
6: echo
7: echo "Example of running 4 Hatari instances in a MIDI ring, each using midi/ as HD:"
8: echo " ${0##*/} 4 -d midi/"
1.1 root 9: exit 1
10: fi
11: count=$1
12: shift
13: args=$*
14:
15: # open fifos
16: for i in $(seq $count); do
17: mkfifo midi$i
1.1.1.5 ! root 18: if [ $? -ne 0 ]; then
! 19: echo "ERROR: creating FIFO 'midi$i' for MIDI communication failed!"
! 20: exit 1
! 21: fi
1.1 root 22: done
23:
1.1.1.4 root 24: # show full path
25: hatari=$(which hatari)
1.1 root 26:
27: # run MIDI ring Hatari instances
28: catpids=""
29: for i in $(seq $(($count-1))); do
30: next=$(($i+1))
1.1.1.4 root 31: echo $hatari --midi-in midi$i --midi-out midi$next $args &
32: hatari --midi-in midi$i --midi-out midi$next $args &
1.1 root 33: # Without this Hataris would deadlock as fifos
34: # block the process until both ends are opened.
35: # Hatari opens midi output first (for writing),
36: # so this needs to read it.
37: cat midi$next >/dev/null &
38: catpids="$catpids $!"
39: done
40: # and join the beginning and end of the MIDI ring
1.1.1.4 root 41: echo $hatari --midi-in midi$count --midi-out midi1 $args &
42: hatari --midi-in midi$count --midi-out midi1 $args &
1.1 root 43: cat midi1 >/dev/null &
44: catpids="$catpids $!"
45:
46: # after connections are open, fifo files can be removed
47: sleep 2
48: for i in $(seq $count); do
49: rm midi$i
50: done
51: kill -9 $catpids
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.