Annotation of hatari/tools/hatari-local-midi-ring.sh, revision 1.1.1.3

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
                     18: done
                     19: 
                     20: # hatari command line
                     21: hatari="hatari $args"
                     22: 
                     23: # run MIDI ring Hatari instances
                     24: catpids=""
                     25: for i in $(seq $(($count-1))); do
                     26:        next=$(($i+1))
                     27:        echo $hatari --midi-in midi$i --midi-out midi$next &
                     28:        $hatari --midi-in midi$i --midi-out midi$next &
                     29:        # Without this Hataris would deadlock as fifos
                     30:        # block the process until both ends are opened.
                     31:        # Hatari opens midi output first (for writing),
                     32:        # so this needs to read it.
                     33:        cat midi$next >/dev/null &
                     34:        catpids="$catpids $!"
                     35: done
                     36: # and join the beginning and end of the MIDI ring
                     37: echo $hatari --midi-in midi$count --midi-out midi1 &
                     38: $hatari --midi-in midi$count --midi-out midi1 &
                     39: cat midi1 >/dev/null &
                     40: catpids="$catpids $!"
                     41: 
                     42: # after connections are open, fifo files can be removed
                     43: sleep 2
                     44: for i in $(seq $count); do
                     45:        rm midi$i
                     46: done
                     47: kill -9 $catpids

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.