Fast terminal response to keyboard
Sabita Nagarajan
sabi at vax1.acs.udel.EDU
Thu Aug 9 08:36:05 AEST 1990
I have an application which sends large amounts of output to the terminal.
I'd like to be able to stop the output by pressing one key. To do this, I
have been doing something like this:
close(0);
if(open("/dev/tty", O_RDWR | O_NDELAY) == -1) {
fprintf(stderr, open_error_message);
exit(1);
}
...
if(ioctl(0, TCGETA, &tsave) == -1) {
fprintf(stderr, ioctl_error_message);
exit(1);
}
tchange = tsave;
tchange.c_lflag &= ~(ICANON | ECHO);
tchange.c_cc[VMIN] = 1;
tchange.c_cc[VTIME] = 0;
if(ioctl(0, TCSETAF, &tchange) == -1) {
fprintf(stderr, ioctl_error_message);
exit(1);
}
...
And then to do the read:
while(TRUE) {
output_to_terminal();
c = '\0';
read(0, &c, 1);
if(c != '\0')
exit();
}
Well, not exactly, but you get the idea. This is a fairly straightforward
polling scheme, but I notice there's still some slight delay between the
time I press the key and the program exit. This is especially true on
terminals I have hooked up to standard serial ports (Oops, sorry, I have
a Wyse 3225 running SCO Xenix 2.3.2 and Computone 16 port board). I'm
running off the standard ports because it looks like whenever I put the
Computone ports into raw mode, a SIGHUP is generated somehow. But that's
another question. My question here is: How can I get a faster response
from the keyboard? The output_to_terminal only has to put out a couple of
chars at a time before returning, so it's pretty fast. What can I do to
speed things up?
Thanks in advance!!
looking for a way to gener
More information about the Comp.unix.wizards
mailing list