# Helper procedure proc stty args { eval [list exec /bin/stty <@/dev/tty] $args } proc yesOrNo {prompt} { # Save the current state; makes it easier to reset! set savedStty [stty -g] # Turn off echoing and turn on raw input stty -echo raw # Prompt! puts -nonewline "$prompt [Y/N] " flush stdout set answer ? # Get input as yes or no, or sound the terminal bell... while {1} { switch [string tolower [read stdin 1]] { y {set answer yes; puts YES; break} n {set answer no; puts NO; break} default {puts -nonewline \a; flush stdout} } } # Put things back as they were; this is IMPORTANT! stty $savedStty return $answer } # DEMO CODE! if {[yesOrNo "Frobnicate the manglewurzel?"]} { frobnicate manglewurzel }