On this page:
read-all
read-all-syntax
port->srcloc
read-available-bytes

9 Ports

 (require (planet cce/scheme:6:3/port))

This module provides tools for port I/O.

(read-all [reader port])  list?
  reader : (-> any/c) = read
  port : input-port? = (current-input-port)
This function produces a list of all the values produced by calling (reader) while current-input-port is set to port, up until it produces eof.

Examples:

  > (read-all read (open-input-string "1 2 3"))

  (1 2 3)

  > (parameterize ([current-input-port (open-input-string "a b c")])
      (read-all))

  (a b c)

(read-all-syntax [reader port])  (syntax/c list?)
  reader : (-> (or/c syntax? eof-object?)) = read
  port : input-port? = (current-input-port)
This function produces a syntax object containing a list of all the syntax objects produced by calling (reader) while current-input-port is set to port, up until it produces eof. The source location of the result spans the entire portion of the port that was read.

Examples:

  (define port1 (open-input-string "1 2 3"))
  > (port-count-lines! port1)
  > (read-all-syntax read-syntax port1)

  #<syntax:1:0 (1 2 3)>

  (define port2 (open-input-string "a b c"))
  > (port-count-lines! port2)
  > (parameterize ([current-input-port port2])
      (read-all-syntax))

  #<syntax:1:0 (a b c)>

(port->srcloc port [source span])  srcloc?
  port : port?
  source : any/c = (object-name port)
  span : exact-nonnegative-integer? = 0
Produces a srcloc structure representing the current position of a port, using the provided source and span values to fill in missing fields. This function relies on port-next-location, so line counting must be enabled for port to get meaningful results.

Examples:

  (define port (open-input-string "1 2 3"))
  > (port-count-lines! port)
  > (read port)

  1

  > (port->srcloc port)

  #(struct:srcloc string 1 1 2 0)

  > (port->srcloc port "1 2 3" 1)

  #(struct:srcloc "1 2 3" 1 1 2 1)

This function reads all immediately available bytes from a port and produces a byte string containing them. If there are no bytes available and the port is known to have no more input, it produces eof; if there are none available but the port may have more input, it produces an empty byte string. This procedure never blocks to wait for input from the port.

Examples:

  (define-values [in out] (make-pipe))
  > (parameterize ([current-input-port in]) (read-available-bytes))

  #""

  > (write-byte (char->integer #\c) out)
  > (read-available-bytes in)

  #"c"

  > (read-available-bytes in)

  #""

  > (close-output-port out)
  > (read-available-bytes in)

  #<eof>