;;; SEGMENT-READER with DO

(defun segment-reader (stream ch n)
  (do ((n n (1- n))
       (acc nil
	    (push
	     (do ((curr (read-char stream)
			(read-char stream))
		  (chars nil (push curr chars)))
		 ((char= ch curr) (coerce (nreverse chars) 'string)))
	     acc)))
      ((< n 1) (nreverse acc))))