termio under SysV (kbdhit() and getch())
John Campbell
jdc at naucse.UUCP
Wed Mar 1 02:58:53 AEST 1989
I'm trying to implement some getch(), getche(), and kbdhit() type
routines under SysV (on a 3b1 actually). I've done the following
kind of thing:
snippet for getch():
if (ioctl (fileno(keyboard), TCGETA, &term_s) < 0) Fail;
term_s.c_lflag &= ~ICANON;
term_s.c_cc[VEOF] = 1; /* One character reads */
term_s.c_cc[VEOL] = 0x7f; /* 12.7 seconds (best?) */
if (ioctl (fileno(keyboard), TCSETA, &term_s) < 0) Fail;
term_state = 2; /* getche state */
}
i = getc(keyboard);
which works well enough, except I would like the time limit (MIN)
stored in .c_cc[VEOL] to really be infinite.
Question 1: Does 0 or -1 work as a "special" infinite value here?
As for kbdhit() (returns 1 if there is anything in the typeahead
buffer):
if (ioctl (fileno(keyboard), TCGETA, &term_s) < 0) Fail;
term_s.c_lflag &= ~ICANON;
term_s.c_cc[VEOF] = 1; /* One character reads */
term_s.c_cc[VEOL] = 1; /* .1 second read */
if (ioctl (fileno(keyboard), TCSETA, &term_s) < 0) Fail;
term_state = 3; /* getche state */
}
/* Well, all I can think to do is read, and push back... */
i = getc(keyboard);
ungetc(i,keyboard);
if (i > 0) { /* Assume EOF is < 0... */
all I could think of doing was read with a .1 second time limit and see
if anything came in (and, of course, push it back if nothing did).
Question 2: Can anyone think of a better (more direct way) of finding out
if anything is in the typeahead under SysV unix?
John Campbell ...!arizona!naucse!jdc
CAMPBELL at NAUVAX.bitnet
unix? Sure send me a dozen, all different colors.
--
John Campbell ...!arizona!naucse!jdc
CAMPBELL at NAUVAX.bitnet
unix? Sure send me a dozen, all different colors.
More information about the Comp.unix.questions
mailing list