ANSITerminalStream ClassANSITerminalStream objects and their methods provides basic I/O
capabilities for consoles that use standard input and output input, as
well as serial terminals.
ANSITerminalStream also provides basic input translation and
output formatting for ANSI, VT100, XTerm, and similar terminal types.
ANSITerminalStream does not provide curses-like screen
buffering methods. The class’s output methods output characters
correctly whether the terminal is in canonical or raw mode.
If a program sets the terminal to raw mode (either with the
rawMode or getCh methods), it should also output characters
with printOn, and restore the terminal before exiting, as this
example illustrates.
int main () {
ANSITerminalStream new term;
Character new c;
term rawMode;
term clear;
term gotoXY 1, 1;
while ((c = term getCh) != EOF)
term printOn "%c", c;
term restoreTerm;
}
If a program needs to handle cursor and other non-alphanumeric keys,
then it must open the TerminalStream input queue (with the
openInputQueue method) and read input events.
See TerminalStream.
At present, Ctalk recognizes the following input event classes.
KBDCHAR # ASCII Characters KBDCUR # Cursor Keys.
When reading an InputEvent (with nextInputEvent in
TerminalStream class), the event class is stored in the
eventClass instance variable of the InputEvent object.
Here is an example of a program that opens a terminal input queue and reads characters by retrieving input event objects from the queue.
int main () {
ANSITerminalStream new term;
Character new c;
InputEvent new iEvent;
term rawMode;
term clear;
term cursorPos 1, 1;
term openInputQueue;
while ((c = term getCh) != EOF) {
iEvent become (term nextInputEvent);
if (iEvent eventClass == KBDCHAR) {
term printOn "<KEY>%c", iEvent eventData;
}
if (iEvent eventClass == KBDCUR) {
term printOn "<CURSOR>%c", iEvent eventData;
}
}
}
Because ANSITerminalStream objects wait until the user has
typed a key, programs can read input events synchronously, but
programs that use other input stream classes may read the input queue
asynchronously.
Newly created ANSITerminalStream objects use standard input and
standard output as their file streams. Programs that read and write
to serial terminals can open the terminal’s serial line with
openOn, and set the communication parameters with setTty,
as in this example.
int main () {
ANSITerminalStream new term;
SystemErrnoException new s;
term openOn "/dev/ttyS1";
if (s pending)
s handle;
term setTty 9600, 8, N, 1;
term printOn "Hello, world!\r\nHello, world!\r\n";
term closeStream;
}
However, programs also need to take note of the differences between
xterms, console displays, and serial terminals. For example, some
serial terminals won’t send an ‘ESC’ (0x1b hex) character
until another character is typed at the terminal to flush the
terminal’s output. Also, programs should not depend on a particular
terminal’s newline translation protocol, and some terminals echo tab
characters without special configuration. Some terminal parameters
are tunable in the ANSITerminalStrea class, but if a program
needs special character handling, you may need to write a subclass of
ANSITerminalStream for a particular terminal.
inputHandleA ReadFileStream object that contains the terminal’s input
stream. The handle is initialized to standard input when the
ANSITerminalStream object is created. Also refer to the
information for outputHandle, below.
outputHandleA WriteFileStream object that contains the terminal’s output
stream. The handle is initialized to standard output when the
ANSITerminalStream object is created. Programs can use the
methods openOn and setTty (below), to open and configure
handles for serial terminals.
In practice, objects that are instances of ANSITerminalPane and
its subclasses use the inputHandle stream for both input and
output with serial terminals, but programs can configure
ouputHandle independenly if necessary.
queueInputTrue if queueing input events.
rawModeFlagTrue if the terminal stream parameters are set to raw mode.
termioCIFlagtermioCOFlagtermioCLFlagtermioCCFlagTerminal settings. These variables are set with the current terminal
parameters when creating an
ANSITerminalStream object with new, and restored by the
restoreTerm method.
ttyDeviceA String containing the path terminal’s device file, if
different than stdinStream and stdoutStream. This
variable is currently unused.
clear (void)Clear the terminal stream.
closeStream (void)Close a terminal stream that was previously opened with openOn,
below.
cursorPos (int row, int column)Set the cursor position to row, column. The upper
left-hand corner of screen is 1,1.
getCh (void)Get a character from the terminal without echoing it. This method
handles C-c, C-d, and C-z control characters by
exiting. This method calls rawMode, so the application must
call restoreTerm before exiting.
gotoXY (int row, int column)Set the cursor position to row, column. The upper
left-hand corner of screen is 1,1. This method is a synonym for
cursorPos, above.
new (stream1, stream2, ... streamN; )Create one or more new ANSITerminalStream objects and initialize
their input and output handles to stdinStream.
See ReadFileStream, and stdoutStream. See WriteFileStream.
For example,
ANSITerminalStream new stream1, stream2;
openInputQueue (void)Begin queueing input events. See InputEvent.
openOn (char *tty_device_name)Open a tty device for the receiver.
printOn (char *fmt, ...)Print the formatted output to the receiver’s output stream.
rawMode (void)Set the terminal input and output streams to raw mode.
readChar (void)Read a character from the receiver’s input stream.
readLine (void)Read a line of text from the receiver’s input stream and return
a String object with the text.
restoreTerm (void)Restore the terminal parameters to the values when the
ANSITerminalStream object was created. Applications must call this
method after using the getCh and rawMode methods, or the
terminal may be unusable after the the application exits.
setGraphics (char attribute)Set the graphics attribute for the following characters. The attribute argument can be one of the following characters.
0 Attributes Off 1 Bold 4 Underscore 5 Blink 7 Reverse
setTty (int speed, int data_bits, char parity, int stop_bits)Set the communication parameters of a terminal device opened with
openOn, above.