+ (simple-stream-dispatch stream
+ ;; single-channel-simple-stream
+ (with-stream-class (single-channel-simple-stream stream)
+ (loop with max-ptr = (sm buf-len stream)
+ with real-end = (or end (length seq))
+ for src-pos = start then (+ src-pos count)
+ for src-rest = (- real-end src-pos)
+ while (> src-rest 0) ; FIXME: this is non-ANSI
+ for ptr = (let ((ptr (sm buffpos stream)))
+ (if (>= ptr max-ptr)
+ (sc-flush-buffer stream t)
+ ptr))
+ for buf-rest = (- max-ptr ptr)
+ for count = (min buf-rest src-rest)
+ do (progn (add-stream-instance-flags stream :dirty)
+ (setf (sm buffpos stream) (+ ptr count))
+ (buffer-copy seq src-pos (sm buffer stream) ptr count))))
+ ;; dual-channel-simple-stream
+ (error "Implement me")
+ ;; string-simple-stream
+ (error 'simple-type-error
+ :datum stream
+ :expected-type 'stream
+ :format-control "Can't write-byte on string streams."
+ :format-arguments '()))