# StdChannels

Standard channels corresponding to the the standard file descriptors ``stdin`', ``stdout`', ``stderr`', and the pseudo channel ``/dev/null`'.

Standard channels do not have to be opened by a client program since they are already open and ready for use. Under some operating system they may be connected to sources and destinations specified before the program is run, while on a stand-alone system they may be connected to a console terminal.

The standard channels (stdin, stdout, stderr) should never be closed and the values used to identify standard channels should be constant throughout the execution of the program.

### Import List

        Channel
        Time

Class List
NullChannel |
Writer |

Class Summary: NullChannel [Detail]

      +---Channel.Channel
           |
           +--StdChannels.NullChannel

Inherited Fields
From Channel.Channel: open, readable, res, writable
Method Summary
Close() Flushes all buffers associated with ch, closes the channel, and frees all system resources allocated to it.
Flush() Flushes all buffers related to this channel.
GetModTime(VAR TimeStamp) Retrieves the modification time of the data accessed by the given channel.
Length(): LONGINT Result is the number of bytes of data that this channel refers to.
NewReader(): Reader Attaches a new reader to the channel ch.
NewWriter(): Writer Attaches a new writer to the channel ch.
Inherited Methods
From Channel.Channel: ClearError, Close, Flush, GetModTime, Length, NewReader, NewWriter

Class Summary: Writer [Detail]

      +---Channel.Writer
           |
           +--StdChannels.Writer

Inherited Fields
From Channel.Writer: base, bytesWritten, positionable, res
Method Summary
Pos(): LONGINT Returns the current writing position associated with the writer w in channel w.base, i.e.
SetPos(LONGINT) Sets the writing position to newPos.
WriteByte(BYTE) Writes a single byte x to the channel w.base at the writing position associated with w.
WriteBytes(ARRAY OF BYTE, LONGINT, LONGINT) Writes n bytes from x, starting at position start, to the channel w.base at the writing position associated with w.
Inherited Methods
From Channel.Writer: ClearError, Pos, SetPos, WriteByte, WriteBytes

Variable Summary
null-: NullChannel Null channel.
stderr-: Channel Standard error output.
stdin-: Channel Standard input.
stdout-: Channel Standard output.

Class Detail: NullChannel

Method Detail

### Close

    PROCEDURE (ch: NullChannel) Close()

> Flushes all buffers associated with ch, closes the channel, and frees all system resources allocated to it. This invalidates all riders attached to ch, and they can't be used further. On success, i.e. if all read and write operations (including flush) completed successfully, ch.res is set to done. An opened channel can only be closed once, successive calls of Channel.Close are undefined. Note that unlike the Oberon System all opened channels have to be closed explicitly. Otherwise resources allocated to them will remain blocked.

> [Description inherited from Close]

> Redefines: Close

### Flush

    PROCEDURE (ch: NullChannel) Flush()

> Flushes all buffers related to this channel. Any pending write operations are passed to the underlying OS and all buffers are marked as invalid. The next read operation will get its data directly from the channel instead of the buffer. If a writing error occurs during flushing, the field ch.res will be changed to writeError, otherwise it's assigned done. Note that you have to check the channel's Channel.res flag after an explicit flush yourself, since none of the attached writers will notice any write error in this case.

> [Description inherited from Flush]

> Redefines: Flush

### GetModTime

    PROCEDURE (ch: NullChannel) GetModTime(VAR mtime: TimeStamp)

> Retrieves the modification time of the data accessed by the given channel. If no such information is avaiblable, ch.res is set to noModTime, otherwise to done.

> [Description inherited from GetModTime]

> Redefines: GetModTime

### Length

    PROCEDURE (ch: NullChannel) Length(): LONGINT

> Result is the number of bytes of data that this channel refers to. If ch represents a file, then this value is the file's size. If ch has no fixed length (e.g. because it's interactive), the result is noLength.

> [Description inherited from Length]

> Redefines: Length

### NewReader

    PROCEDURE (ch: NullChannel) NewReader(): Reader

> Attaches a new reader to the channel ch. It is placed at the very start of the channel, and its Reader.res field is initialized to done. ch.res is set to done on success and the new reader is returned. Otherwise result is NIL and ch.res is changed to indicate the error cause. Note that always the same reader is returned if the channel does not support multiple reading positions.

> [Description inherited from NewReader]

> Redefines: NewReader

### NewWriter

    PROCEDURE (ch: NullChannel) NewWriter(): Writer

> Attaches a new writer to the channel ch. It is placed at the very start of the channel, and its Writer.res field is initialized to done. ch.res is set to done on success and the new writer is returned. Otherwise result is NIL and ch.res is changed to indicate the error cause. Note that always the same reader is returned if the channel does not support multiple writing positions.

> [Description inherited from NewWriter]

> Redefines: NewWriter

Class Detail: Writer

Method Detail

### Pos

    PROCEDURE (w: Writer) Pos(): LONGINT

> Returns the current writing position associated with the writer w in channel w.base, i.e. the index of the first byte that is written by the next call to Writer.WriteByte or Writer.WriteBytes. This procedure will return noPosition if the writer has no concept of a writing position (e.g. if it corresponds to output to terminal), otherwise the result is not negative.

> [Description inherited from Pos]

> Redefines: Pos

### SetPos

    PROCEDURE (w: Writer) SetPos(newPos: LONGINT)

> Sets the writing position to newPos. A negative value of newPos or calling this procedure for a writer that doesn't allow positioning will set `w.res' to outOfRange. A value larger than the channel's length is legal, the following write operation will fill the gap between the end of the channel and this position with zero bytes. Calls to this procedure while ``w.res # done`' will be ignored.

> [Description inherited from SetPos]

> Redefines: SetPos

### WriteByte

    PROCEDURE (w: Writer) WriteByte(x: BYTE)

> Writes a single byte x to the channel w.base at the writing position associated with w. The writing position is moved forward by one byte on success, otherwise w.res is changed to indicate the error cause. w.bytesWritten will be ``1`' on success and ``0`' on failure. Calls to this procedure while ``w.res # done`' will be ignored.

> [Description inherited from WriteByte]

> Redefines: WriteByte

### WriteBytes

    PROCEDURE (w: Writer) WriteBytes(x: ARRAY OF BYTE;
                         start: LONGINT;
                         n: LONGINT)

> Writes n bytes from x, starting at position start, to the channel w.base at the writing position associated with w. The writing position is moved forward by n bytes on success, otherwise w.res is changed to indicate the error cause. w.bytesWritten will hold the number of bytes that were actually written (being equal to n on success). Calls to this procedure while ``w.res # done`' will be ignored.

> Pre-condition: ``(n >= 0) & (0 <= start) & (start+n <= LEN (x))`'

> [Description inherited from WriteBytes]

> Redefines: WriteBytes

Variable Detail

### null

    VAR null-: NullChannel

> Null channel. Write only, accepts arbitrary input.

### stderr

    VAR stderr-: Channel

> Standard error output.

### stdin

    VAR stdin-: Channel

> Standard input.

### stdout

    VAR stdout-: Channel

> Standard output.