11.5.1 Stream Pointer Positioning
Ada.Text_IO has a definition of current position for a file that
is being read. No internal buffering occurs in Text_IO, and usually the
physical position in the stream used to implement the file corresponds
to this logical position defined by Text_IO. There are two exceptions:
- After a call to End_Of_Page that returns True, the stream
is positioned past the LF (line mark) that precedes the page
mark. Text_IO maintains an internal flag so that subsequent read
operations properly handle the logical position which is unchanged by
the End_Of_Page call.
- After a call to End_Of_File that returns True, if the
Text_IO file was positioned before the line mark at the end of file
before the call, then the logical position is unchanged, but the stream
is physically positioned right at the end of file (past the line mark,
and past a possible page mark following the line mark. Again Text_IO
maintains internal flags so that subsequent read operations properly
handle the logical position.
These discrepancies have no effect on the observable behavior of
Text_IO, but if a single Ada stream is shared between a C program and
Ada program, or shared (using shared=yes
in the form string)
between two Ada files, then the difference may be observable in some
situations.