Gaucheでgetpassっぽいやつを実現してみる

30分プログラム、その354。GauchePythongetpassモジュールっぽいやつを実現している。
Unix/Linuxプログラミング理論と実践の端末の項目を読んでたら、"エコーなしの入力を実現するにはsttyを使うだけで簡単にできるよ"と書いてあったので、それを試したかったってのもある。

使い方

$ gosh getpass.scm
Password:
you inputed: hoge

ソースコード

#! /opt/local/bin/gosh
;; -*- mode:scheme; coding:utf-8 -*-
;;
;; getpass.scm -
;;
;; Copyright(C) 2008 by mzp
;; Author: MIZUNO Hiroki / mzpppp at gmail dot com
;; http://howdyworld.org
;;
;; Timestamp: 2008/08/24 22:16:29
;;
;; This program is free software; you can redistribute it and/or
;; modify it under MIT Lincence.
;;

(use gauche.process)

(define (no-echo f)
  (unwind-protect
   (begin
     (sys-system "stty -echo")
     (f))
   (sys-system "stty echo")))

(define (get-password)
  (display "Password:")
  (flush)
  (no-echo 
   (lambda () (begin0
		(read)
		(display #\newline)))))

(define pass (get-password))
(print "you inputed: " pass)