original commit: 19cee776e45e8b86a15b83adc1ae5bb504bf8210
This commit is contained in:
Matthew Flatt 2005-03-04 21:43:17 +00:00
parent fc7d002ed2
commit 21726610d3

View File

@ -241,10 +241,21 @@
(define bb 0) ; /* bit buffer */
(define bk 0) ; /* bits in bit buffer */
(define peeked 0)
(define PEEK-LIMIT 32) ; assume that lookahead never needs more than 32 bytes
(define (NEEDBITS n)
(when (< bk n)
(set! bb (+ bb (arithmetic-shift (read-byte input-port) bk)))
(let ([v (if (peeked . < . PEEK-LIMIT)
(peek-byte input-port peeked)
(begin
(read-byte input-port)
(set! peeked (sub1 peeked))
(peek-byte input-port peeked)))])
(unless (eof-object? v)
(begin
(set! bb (+ bb (arithmetic-shift v bk)))
(set! peeked (add1 peeked)))))
(set! bk (+ bk 8))
(NEEDBITS n)))
(define (DUMPBITS n)
@ -798,10 +809,14 @@
; * can discard unused bits in the last meaningful byte.
; */
(let loop ()
(when (> bk 8)
(when (>= bk 8)
(set! bk (- bk 8))
; do something: inptr--
(set! peeked (sub1 peeked))
(loop)))
(let loop ([peeked peeked])
(when (positive? peeked)
(read-byte input-port)
(loop (sub1 peeked))))
(flush-output wp)
#t = (void)))
#f))))