The IOSTREAM
has a field position
that
points at a structure of type IOPOS
. This structure is
defined as below.
typedef struct io_position { int64_t byteno; /* byte-position in file */ int64_t charno; /* character position in file */ int lineno; /* lineno in file */ int linepos; /* position in line */ intptr_t reserved[2]; /* future extensions */ } IOPOS;
If a stream is created using the flag SIO_RECORDPOS
the
IO functions maintain the position information. Note that, supporting
the ISO stream position data (see stream_property/2),
both the byte and character position is maintained. These may differ if
the stream uses a multibyte encoding.
The linepos
is updated as follows: \n
and \r
reset the position to 0 (zero). The backspace (\b
)
decrements the position if it is positive. The tab (\t
)
tabs to the next multiple of 8. Any other character increments the line
position by one. Future versions may change that, notably the tab width
might no longer be hard coded.