dwright@wheaton.UUCP (David Wright) (08/12/90)
System: Ultrix 2.0, vt100 terminals. I am currently writing a C program that takes as input an escape alone, and escape sequences (such as the arrow keys generate, e.g. ^[[A). When my program receives an escape I go into non-blocking mode to check and see if there are any other key-strokes availabile. If there aren't then I assume that an escape by itself has been pressed. If there are, I read them to find out which arrow key was pressed (assuming it was an arrow-key). Unfortunately, this doesn't work to well. If an arrow-key is pressed the individual key-strokes sometimes arrive at a considerable interval. When I check in non-blocking mode to see if there is a character after the initial escape, the next character (e.g. "[") sometimes has not arrived yet, so that it appears as though an escape only was pressed. I have tried to read continuously in non-blocking mode after an escape was pressed. This guarantees that I will see the arrow-key, if one was pressed. However this makes for awkward parsing when I try to see whether an escape only was pressed. If the user presses an escape, followed by a regular character, I have provide for 'ungetting' that character in some way. This is not too hard but seems to lack elegance. Also, it becomes very difficult if the escape is followed by something like another arrow-key. Then there are three characters available after the escape, and this is a mess. What I am wondering is if there is some elegant solution for waiting a set period of time after esape is pressed? Then I could wait for a while, say 1/2 second, and check if there are any characters after the escape. I have tried a sleep(1), but this can result in a wait of up to 2 seconds. I know there is way of doing what I want to do on SYS V. (Turning off ICANON and using VMIN and VTIME). Please respond via E-mail, unless you think it's something everyone would benefit from. I will sumarize. Sections of code welcomed. Thanks in advance for your help, David Wright, dwright@wheaton.uucp