A procedure that reads text without echoing it -- useful for password prompts.

-Eric

See also GettingUserInputSansEcho.
----

  ;; ,open let-opt
  
  ;; read string without echoing it
  ;; optionals arguments:
  ;; prompt - a string to be display before reading (default none)
  ;; port - the port to read from (default current-input-port)
  (define (read-password . args)
    (let-optionals args ((prompt #f)
  		       (port (current-input-port)))
      (let* ((tty-before (tty-info port))
  	   (tty-sans-echo (copy-tty-info tty-before)))
        (if prompt
  	  (begin
  	    (display prompt)
  	    (force-output (current-output-port))))
        (set-tty-info:local-flags 
         tty-sans-echo (bitwise-and (tty-info:local-flags tty-sans-echo) 
  				  (bitwise-not ttyl/echo)))
        (set-tty-info/now port tty-sans-echo)
        (let ((password (read-line port)))
  	(set-tty-info/now port tty-before)
  	(flush-tty/both port)
  	password))))
  