#!./tclmidi
proc Usage {} {
	puts stderr {Usage: mplay [-quiet] [-repeat] [-smpte] [filename]}
}

set repeat ""
set quiet 0
set smpte 0
set fname stdin
set f stdin

for {set i 0} {$i < $argc} {incr i} {
	switch -- [lindex $argv $i] {
	"-?" -
	"-h" -
	"-help" {
		Usage
		exit 1
	}
	"-repeat" {
		set repeat repeat
	}
	"-quiet" {
		set quiet 1
	}
	"-smpte" {
		mididevice {name "/dev/smpte0"}
		set smpte 1
	}
	default {
		if {$fname != "stdin"} {
			Usage
			exit 1
		} else {
			set fname [lindex $argv $i]
			set f [open $fname r]
		}
	}
	}
}

# can't read key strokes if file is coming from stdin
if {$fname == "stdin"} {
	set quiet 1
}

if {!$quiet} {
	puts "loading, please wait"
}
set mf [midiread $f]

if {!$quiet && !$smpte} {
	puts "press return to begin playing"
	gets stdin
}
if {![midiplay $mf $repeat]} {
	puts stderr "midiplay command not available"
	exit 1
}
if {!$smpte} {
	if {$repeat != "repeat" || $quiet} {
		midiwait
		midistop
	} else {
		puts "press return to stop playing"
		gets stdin
		midistop
	}
} else {
	if {$quiet} {
		midiwait
		midistop
	} else {
		set tm [smptetime]
		puts -nonewline $tm
		flush stdout

		set lt [string range $tm 0 7]
		while 1 {
			set tm [smptetime]
			set nt [string range $tm 0 7]
			if {$nt != $lt} {
				puts -nonewline "\r                        \r"
				puts -nonewline "$nt"
				flush stdout
				set lt $nt
			}
			exec sleep 1
		}
	}
}
