mes; Add read-line.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sun, 11 Nov 2018 15:57:58 +0000 (16:57 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sun, 11 Nov 2018 15:57:58 +0000 (16:57 +0100)
* mes/module/mes/guile.mes (read-line): New function.

mes/module/mes/guile.mes

index 76c3f781887b16990def49e4b51617ba6bbe802b..28c4b49acb1d86803550af68025bd9537b011cac 100644 (file)
 
 (define (drain-input port) (read-string))
 
+(define (read-line . rest)
+  (let* ((port (if (pair? rest) (car rest) (current-input-port)))
+         (handle-delim (if (and (pair? rest) (pair? (cdr rest))) (cadr rest) 'trim))
+         (c (read-char port)))
+    (if (eof-object? c) c
+        (list->string
+         (let loop ((c c))
+           (if (or (eof-object? c) (eq? c #\newline)) (case handle-delim
+                                                        ((trim) '())
+                                                        ((concat) '(#\newline))
+                                                        (else (error (format #f "not supported: handle-delim=~a" handle-delim))))
+               (cons c (loop (read-char port)))))))))
+
 (define (make-string n . fill)
   (list->string (apply make-list n fill)))