Home | History | Annotate | Line # | Download | only in libtos
keywait.c revision 1.1.1.1.170.1
      1  1.1.1.1.170.1  yamt /*	$NetBSD: keywait.c,v 1.1.1.1.170.1 2009/05/04 08:10:50 yamt Exp $	*/
      2            1.1   leo 
      3            1.1   leo /*
      4            1.1   leo  * Copyright (c) 1995 Waldi Ravens.
      5            1.1   leo  * All rights reserved.
      6            1.1   leo  *
      7            1.1   leo  * Redistribution and use in source and binary forms, with or without
      8            1.1   leo  * modification, are permitted provided that the following conditions
      9            1.1   leo  * are met:
     10            1.1   leo  * 1. Redistributions of source code must retain the above copyright
     11            1.1   leo  *    notice, this list of conditions and the following disclaimer.
     12            1.1   leo  * 2. Redistributions in binary form must reproduce the above copyright
     13            1.1   leo  *    notice, this list of conditions and the following disclaimer in the
     14            1.1   leo  *    documentation and/or other materials provided with the distribution.
     15            1.1   leo  * 3. All advertising materials mentioning features or use of this software
     16            1.1   leo  *    must display the following acknowledgement:
     17            1.1   leo  *        This product includes software developed by Waldi Ravens.
     18            1.1   leo  * 4. The name of the author may not be used to endorse or promote products
     19            1.1   leo  *    derived from this software without specific prior written permission.
     20            1.1   leo  *
     21            1.1   leo  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     22            1.1   leo  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     23            1.1   leo  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     24            1.1   leo  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     25            1.1   leo  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     26            1.1   leo  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     27            1.1   leo  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     28            1.1   leo  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     29            1.1   leo  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     30            1.1   leo  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     31            1.1   leo  */
     32            1.1   leo 
     33            1.1   leo #include <stdio.h>
     34            1.1   leo #include <stdlib.h>
     35            1.1   leo #include <unistd.h>
     36            1.1   leo #include <termios.h>
     37            1.1   leo #include "libtos.h"
     38            1.1   leo 
     39            1.1   leo int
     40  1.1.1.1.170.1  yamt key_wait(char *text)
     41            1.1   leo {
     42            1.1   leo 	struct termios	term_attr;
     43            1.1   leo 	tcflag_t	lfl_orig;
     44            1.1   leo 	int		any_key;
     45            1.1   leo 	char		c;
     46            1.1   leo 
     47            1.1   leo 	any_key = (text == NULL);
     48            1.1   leo 	if (any_key)
     49            1.1   leo 		text = "Press any key...";
     50            1.1   leo 
     51            1.1   leo 	fprintf(stderr, text);
     52            1.1   leo 	fflush(stderr);
     53            1.1   leo 
     54            1.1   leo 	tcgetattr(STDERR_FILENO, &term_attr);
     55            1.1   leo 	lfl_orig = term_attr.c_lflag;
     56            1.1   leo 	if (any_key)
     57            1.1   leo 		term_attr.c_lflag &= ~ECHO;
     58            1.1   leo 	term_attr.c_lflag &= ~ICANON;
     59            1.1   leo 	tcsetattr(STDERR_FILENO, TCSAFLUSH, &term_attr);
     60            1.1   leo 	read(STDERR_FILENO, &c, 1);
     61            1.1   leo 	term_attr.c_lflag = lfl_orig;
     62            1.1   leo 	tcsetattr(STDERR_FILENO, TCSAFLUSH, &term_attr);
     63            1.1   leo 
     64            1.1   leo 	fprintf(stderr, (any_key ? "\r" : "\r\n"));
     65            1.1   leo 	fflush(stderr);
     66            1.1   leo 	return(c);
     67            1.1   leo }
     68