original commit: 9ac7d7d43715ed6314d9ce17fe0d91fe73b6d518
This commit is contained in:
Matthew Flatt 2005-04-29 21:11:15 +00:00
parent 9b949bf42e
commit b3f6231df6
2 changed files with 681 additions and 623 deletions

View File

@ -2,13 +2,17 @@
(module port mzscheme (module port mzscheme
(require (lib "etc.ss") (require (lib "etc.ss")
(lib "contract.ss") (lib "contract.ss")
(lib "list.ss")) (lib "list.ss")
"private/port.ss")
(provide open-output-nowhere (provide open-output-nowhere
make-pipe-with-specials make-pipe-with-specials
make-input-port/read-to-peek make-input-port/read-to-peek
peeking-input-port peeking-input-port
relocate-input-port relocate-input-port
transplant-input-port
relocate-output-port
transplant-output-port
merge-input merge-input
copy-port copy-port
input-port-append input-port-append
@ -73,22 +77,6 @@
;; ---------------------------------------- ;; ----------------------------------------
(define open-output-nowhere
(opt-lambda ([name 'nowhere])
(make-output-port
name
always-evt
(lambda (s start end non-block? breakable?) (- end start))
void
(lambda (special non-block? breakable?) #t)
(lambda (s start end) (wrap-evt
always-evt
(lambda (x)
(- end start))))
(lambda (special) (wrap-evt always-evt (lambda (x) #t))))))
;; ----------------------------------------
(define (copy-port src dest . dests) (define (copy-port src dest . dests)
(unless (input-port? src) (unless (input-port? src)
(raise-type-error 'copy-port "input-port" src)) (raise-type-error 'copy-port "input-port" src))
@ -468,40 +456,40 @@
void))) void)))
(define relocate-input-port (define relocate-input-port
(lambda (p line col pos) (opt-lambda (p line col pos [close? #t])
(let-values ([(init-l init-c init-p) (port-next-location p)]) (transplant-to-relocate
(make-input-port transplant-input-port
(object-name p) p line col pos close?)))
(lambda (s) (let ([v (read-bytes-avail!* s p)])
(if (eq? v 0) (define transplant-input-port
(wrap-evt p (lambda (x) 0)) (opt-lambda (p location-proc pos [close? #t] [count-lines!-proc void])
v))) (make-input-port
(lambda (s skip evt) (object-name p)
(let ([v (peek-bytes-avail!* s skip evt p)]) (lambda (s) (let ([v (read-bytes-avail!* s p)])
(if (eq? v 0) (if (eq? v 0)
(choice-evt (wrap-evt p (lambda (x) 0))
(wrap-evt p (lambda (x) 0)) v)))
(if evt (lambda (s skip evt)
(wrap-evt evt (lambda (x) #f)) (let ([v (peek-bytes-avail!* s skip evt p)])
never-evt)) (if (eq? v 0)
v))) (choice-evt
(lambda () (wrap-evt p (lambda (x) 0))
(close-input-port p)) (if evt
(and (port-provides-progress-evts? p) (wrap-evt evt (lambda (x) #f))
(lambda () never-evt))
(port-progress-evt p))) v)))
(and (port-provides-progress-evts? p) (lambda ()
(lambda (n evt target-evt) (when close?
(port-commit-peeked n evt target-evt p))) (close-input-port p)))
(lambda () (and (port-provides-progress-evts? p)
(let-values ([(l c p) (port-next-location p)]) (lambda ()
(values (and l (+ l (- init-l) line)) (port-progress-evt p)))
(and c (if (equal? l init-l) (and (port-provides-progress-evts? p)
(+ c (- init-c) col) (lambda (n evt target-evt)
c)) (port-commit-peeked n evt target-evt p)))
(and p (+ p (- init-p) pos))))) location-proc
void count-lines!-proc
pos)))) pos)))
;; Not kill-safe. ;; Not kill-safe.
(define make-pipe-with-specials (define make-pipe-with-specials

File diff suppressed because it is too large Load Diff