A Prolog stream is a tty stream if the format of the stream is
QP_DELIM_TTY
. A tty stream is normally associated with
a terminal device, a pseudo-terminal device or a terminal emulator.
A set of tty streams can be grouped together through
a distinct character string key for each group of tty streams.
All the tty streams from the same tty device (emulator) should normally
be grouped together.
A tty stream registers itself to a tty stream group by
calling QP_add_tty()
with the specific character string key for the group.
There are two services provided automatically by Prolog I/O system to each tty stream group. When a tty stream is closed, it is automatically removed from its tty group.
A sample Prolog session demonstrates the special services performed
for tty streams. The default open/[3,4]
automatically registers
tty streams to the tty group using filename as the key.
After writing write\n
to Output1
, the counts for
Output1
and Output2
are brought up to date. The counts in Input1
is not changed since counts in input stream are only updated when
reading from the input stream. After reading from Input1, the counts
for all the three streams are updated. The prompt INPUT>>
is written
out either through Output1
or Output2
, so it is included in the counts.
The count in Input1 is different from Output1
and Output2
since
only character r
is consumed in the input of read\n
.
| ?- compile(user). | write_count(Input, Output1, Output2) :- character_count(Input, C0), line_count(Input, L0), line_position(Input, P0), character_count(Output1, C1), line_count(Output1, L1), line_position(Output1, P1), character_count(Output2, C2), line_count(Output2, L2), line_position(Output2, P2), format('input : ~d, ~d, ~d~n', [C0, L0, P0]), format('output1 : ~d, ~d, ~d~n', [C1, L1, P1]), format('output2 : ~d, ~d, ~d~n', [C2, L2, P2]). | ^D % user compiled in module user, 0.216 sec 384 bytes yes | ?- open('/dev/tty', read, Input), prompt(Input, _, 'INPUT>> '), open('/dev/tty', write, Output1), open('/dev/tty', write, Output2), format(Output1, 'write~n', []), write_count(Input, Output1, Output2), get0(Input, _), write_count(Input, Output1, Output2). write input : 0, 1, 0 output1 : 6, 2, 0 output2 : 6, 2, 0 INPUT>> read input : 15, 2, 9 output1 : 19, 3, 0 output2 : 19, 3, 0
Notice that the I/O in the user_input
and user_output
are not included in
the counts although both streams are connected to the same tty.
The three default streams (user_input
, user_output
and user_error
)
are put into a different tty group in
the embedding initialization function, QU_initio()
.