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.