scheme shell
about
download
support
resources
docu
links
 
scsh.net

Expect Functionality

 (define (interact p)
   (let ((child (car p))
  (in (cadr p))
  (out (caddr p)))
     (run (stty raw -echo)) 
     (& (begin (exec-epf (cat) (= 1 ,out))))
     (exec-epf (cat) (= 0 ,in))))

(define-syntax bg (syntax-rules () ((_ cmd) (call-with-values (lambda () (fork-pty-session (lambda () (exec-epf cmd)))) list))))

(define-syntax expect (syntax-rules () ((_ cmd proc) (let* ((p (bg cmd)) (in (cadr p))) (let l ((b "")) (l (string-append (proc p b) (string (read-char in)))))))))

(define (handled m b r) (let ((e (+ m (string-length r)))) (display (substring b 0 e)) (substring b e (string-length b))))

(define-syntax expect-cond (syntax-rules (=>) ((_ b (r => a ...) c ...) (let ((m (string-contains b r))) (if m (begin a ... (handled m b r)) (expect-cond b c ...)))) ((_ b) b)))

(expect (.. cmd ..) (lambda (p b) (let ((po (caddr p))) (expect-cond b ("assword: " => (display "pwpw\n" po))))))


ExpectFunctionality - raw wiki source | code snippets archive