Scheme 48 Manual | Contents | In Chapter: Libraries
Previous: Port extensions | Next: Port extensions

## Port extensions

These procedures are in structure `extended-ports`.

- `(make-string-input-port string) -> input-port`
- `(make-string-output-port) -> output-port`
- `(string-output-port-output string-output-port) -> string`

`Make-string-input-port` returns an input port that that reads characters from the supplied string. An end-of-file object is returned if the user reads past the end of the string. `Make-string-output-port` returns an output port that saves the characters written to it. These are then returned as a string by `string-output-port-output`.

>     (read (make-string-input-port "(a b)"))
>         -> '(a b)

>     (let ((p (make-string-output-port)))
>       (write '(a b) p)
>       (let ((s (string-output-port-output p)))
>         (display "c" p)
>         (list s (string-output-port-output p))))
>         -> '("(a b)" "(a b)c")

- `(limit-output output-port n procedure)`

Procedure is called on an output port. Output written to that port is copied to output-port until n characters have been written, at which point `limit-output` returns. If procedure returns before writing n characters, then `limit-output` also returns at that time, regardless of how many characters have been written.

- `(make-tracking-input-port input-port) -> input-port`
- `(make-tracking-output-port output-port) -> output-port`
- `(current-row port) -> integer or `#f``
- `(current-column port) -> integer or `#f``
- `(fresh-line output-port)`

`Make-tracking-input-port` and `make-tracking-output-port` return ports that keep track of the current row and column and are otherwise identical to their arguments. Closing a tracking port does not close the underlying port. `Current-row` and `current-column` return port's current read or write location. They return `#f` if port does not keep track of its location. `Fresh-line` writes a newline character to output-port if `(current-row `port`)` is not 0.

>     (define p (open-output-port "/tmp/temp"))
>     (list (current-row p) (current-column p))
>         -> '(0 0)
>     (display "012" p)
>     (list (current-row p) (current-column p))
>         -> '(0 3)
>     (fresh-line p)
>     (list (current-row p) (current-column p))
>         -> '(1 0)
>     (fresh-line p)
>     (list (current-row p) (current-column p))
>         -> '(1 0)

Previous: Port extensions | Next: Port extensions