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

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

unix.superglobalmegacorp.com

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