broadcast-stream
A broadcast stream is an output stream which has associated with it a set of zero or more output streams such that any output sent to the broadcast stream gets passed on as output to each of the associated output streams. (If a broadcast stream has no component streams, then all output to the broadcast stream is discarded.)
The set of operations that may be performed on a broadcast stream is the intersection of those for its associated output streams.
Except as explicitly stated otherwise,
the values returned by a stream operation are
the values resulting from performing the operation
on the last of its \term{component streams};
the values resulting from performing the operation
on all preceding \term{streams} are discarded.
Barmar: What if no streams are supplied?
Sandra: Actually, aren't the results of functions that operate on streams
specified explicitly in the descriptions of those functions?
KMP: I'm not sure this answers the question for objects of type BROADCAST-STREAM.
Sandra: CLOSE is a stream operation and this statement is certainly not
true for CLOSE -- the component streams are not closed.
Trying to untangle all the mail on this. -kmp 11-Feb-92Some output operations (e.g., fresh-line) return values based on the state of the stream at the time of the operation. Since these values might differ for each of the component streams, it is necessary to describe their return value specifically:
stream-element-type returns the value from the last component stream, or t if there are no component streams.
fresh-line returns the value from the last component stream, or nil if there are no component streams.
file-length, file-position, file-string-length, and stream-external-format return the value from the last component stream; if there are no component streams, file-length and file-position return 0, file-string-length returns 1, and stream-external-format returns :default.
streamp and output-stream-p always return true for broadcast streams.
open-stream-p tests whether the broadcast stream is open2, not whether its component streams are open.
input-stream-p and interactive-stream-p return an implementation-defined, generalized boolean value.
clear-input listen, peek-char, read-byte, read-char-no-hang, read-char, read-line, and unread-char, the consequences are undefined if the indicated operation is performed. However, an implementation is permitted to define such a behavior as an implementation-dependent extension. For any output operations not having their return values explicitly specified above or elsewhere in this document, it is defined that the values returned by such an operation are the values resulting from performing the operation on the last of its component streams; the values resulting from performing the operation on all preceding streams are discarded. If there are no component streams, the value is implementation-dependent.
broadcast-stream-streams, make-broadcast-stream