;;;; scan-input-lines.scm - scan lines until regex or predicate matches (declare (unit scan-input-lines) (fixnum)) (module scan-input-lines (scan-input-lines) (import (scheme) (chicken base) (chicken io) (chicken irregex)) ;;; Scan lines until regex or predicate matches (define (scan-input-lines rx #!optional (port ##sys#standard-input)) (let ((rx (if (procedure? rx) rx (cute irregex-search (irregex rx) <>)))) (let loop () (let ((ln (read-line port))) (and (not (eof-object? ln)) (or (rx ln) (loop))))))))