Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Date: Fri, 23 Aug 2002 16:35:44 -0600 (MDT) From: "J. Scott Edwards" To: cygwin AT cygwin DOT com Subject: RE: Character at a time input (was Re: Where is less source?) In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Spam-Status: No, hits=-2.3 required=8.0 tests=IN_REP_TO,DOUBLE_CAPSWORD version=2.31 X-Spam-Level: Thanks that worked great! I have another dumb question: is there a simple way to determine if the stdin is from a terminal or is pipe'd in? Thanks again -Scott On Fri, 23 Aug 2002, Rick Hellicar (QMP) wrote: > Don't know about ioctl, but termios will do it. I've included a > simple program that shows it working. > > If you're planning on detecting arrow keys, function keys, etc., then > you have to remember that they produce an escape-sequence of several > characters, which you'll have to detect and decode. > > Hope this helps, > > Rick > > > > > #include > #include > #include > > int > main (void) > { > struct termios new_settings; > struct termios stored_settings; > char c; > > /* record the old settings to restore the terminal when finished */ > tcgetattr (0, &stored_settings); > new_settings = stored_settings; > > /* set things up for character-at-a-time */ > new_settings.c_lflag &= ~(ICANON | ECHO); > new_settings.c_cc[VTIME] = 0; /* don't think this is relevant if VMIN=1 */ > new_settings.c_cc[VMIN] = 1; > tcsetattr (0, TCSANOW, &new_settings); > > /* main loop - press q to exit */ > do > { > c = getchar (); > printf ("%d\t%c\n", c, c); > } > while (c != 'q'); > > /* restore the old settings */ > tcsetattr (0, TCSANOW, &stored_settings); > return 1; > } > > > > > -----Original Message----- > > From: J. Scott Edwards [mailto:sedwards AT xmission DOT com] > > Sent: 22 August 2002 23:23 > > To: Gerrit @ cygwin > > > > Thanks, I found it. But unfortunately it didn't answer my question: > > > > Can ioctl be used to change the standard input into character > > at a time > > mode or do I have to use ncurses or is there a better way to > > just get a > > character at a time? > -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Bug reporting: http://cygwin.com/bugs.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/