GB_STREAM_DESC

struct GB_STREAM;

typedef struct { int (*open)(struct GB_STREAM *stream, const char *path, int mode, void *data); int (*close)(struct GB_STREAM *stream); int (*read)(struct GB_STREAM *stream, char *buffer, long len); int (*write)(struct GB_STREAM *stream, char *buffer, long len); int (*seek)(struct GB_STREAM *stream, long long pos, int whence); int (*tell)(struct GB_STREAM *stream, long long *pos); int (*flush)(struct GB_STREAM *stream); int (*eof)(struct GB_STREAM *stream); int (*lof)(struct GB_STREAM *stream, long long *len); int (*handle)(struct GB_STREAM *stream); } GB_STREAM_DESC;

This describe is a function pointer table that must point at the implementation functions of a stream.

Each stream has a pointer to such a structure. See GB_STREAM for more details.

Function What should be done What should be returned
open Opens the stream.

This function is never called directly by the interpreter, as you must open the file yourself, by instanciating the Stream Gambas object, and by filling the GB_STREAM structure appropriately.
TRUE if the stream cannot be opened, and FALSE if everything is OK.
close Closes the stream. FALSE.
read Reads len bytes into the stream, and fills the buffer with them. TRUE if there was an error, and FALSE if everything is OK.

The errno code is used by the interpreter to choose the error message.
write Writes the len bytes located at buffer to the stream. TRUE if there was an error, and FALSE if everything is OK.

The errno code is used by the interpreter to choose the error message.
seek Seeks into the stream.
  • pos is the position inside the stream.

  • whence is one the following constants:
    • SEEK_SET, to indicate that pos is an absolute position.

    • SEEK_CUR, to indicate that pos is an offset to the current position.

    • SEEK_END, to indicate that pos is an offset from the end of the stream.

TRUE if seeking is impossible, and FALSE if everything is OK.
tell Returns the current stream position in pos. TRUE if seeking is impossible, and FALSE if everything is OK.
flush Flushes the stream. TRUE if there was an error, and FALSE if everything is OK.

If flushing has no sense for your stream, then you must return FALSE.
eof Checks the end of the stream. TRUE if the end of the stream is reached, FALSE otherwise.
lof Returns in len the length of the stream.

If this has no sense for your stream, and if the handle function returns a system file descriptor, you can let the interpreter returns the maximum number of bytes that can be read on the stream for you, by putting 0 in len.
FALSE.
handle Returns the underlying system file descriptor. The underlying system file descriptor.

See also