diff --git a/examples/timed-choice.scm b/examples/timed-choice.scm new file mode 100755 index 0000000..21aa6f3 --- /dev/null +++ b/examples/timed-choice.scm @@ -0,0 +1,37 @@ +#!/bin/sh +exec scsh -lel expect/load.scm -o expect -o srfi-13 -e main -s "$0" "$@" +!# + +(define (display-usage) + (display "Usage: timed-choice.scm timeout query choices...\n") + (display "Provides a query of the user with a timeout and a default answer.\n")) + +(define (raise-too-few-arguments) + (display "timed-choice.scm: too few arguments\n") + (display-usage) + (exit)) + +(define (main args) + (if (< (length args) 4) + (raise-too-few-arguments)) + (let ((timeout (string->number (second args))) + (query (third args)) + (choices (cdddr args))) + (let ((default (car choices)) + (pattern (re-choice (map re-string choices)))) + (display (format #f "~a [~a] " query (string-join choices ", "))) + (display + (expect loop () + (option (timeout timeout) + (on-timeout default)) + ((user-task) + ((rx (: bos ,pattern (| "\n" "\r\n"))) (m) + (match:substring m)) + ((rx (: bos (| "\n" "\r\n"))) () + (string-append default "\n")) + (else + (display (format #f "Please enter one of the choices: ~a.\n" + (string-join choices ", "))) + (loop))))) + ;;(newline) + )))