read.ss
(module read mzscheme
  (provide (all-defined))

  (define read-all
    (case-lambda
      [() (read-all (current-input-port))]
      [(iport)
       (let loop ()
         (let ([next (read iport)])
           (if (eof-object? next)
               null
               (cons next (loop)))))]))

  (define (read-all/file file)
    (with-input-from-file file
      read-all))
  
  (define read-all-syntax
    (case-lambda
      [() (read-all-syntax #f)]
      [(source) (read-all-syntax source (current-input-port))]
      [(source iport) (read-all-syntax source iport (list 0 0 0))]
      [(source iport offsets)
       (let loop ()
         (let ([next (read-syntax source iport offsets)])
           (if (eof-object? next)
               null
               (cons next (loop)))))]))
  
  (define (read-all-syntax/file file)
    (call-with-input-file file
      (lambda (iport) (read-all-syntax file iport))))
  )