Path: utzoo!utgpu!attcan!uunet!husc6!cmcl2!rutgers!ucsd!ucbvax!cogsci.berkeley.edu!jsilva From: jsilva@cogsci.berkeley.edu (John Silva) Newsgroups: comp.unix.wizards Subject: Re: How can I read keyboard without stopping Keywords: curses keyboard Message-ID: <25657@ucbvax.BERKELEY.EDU> Date: 16 Aug 88 07:03:14 GMT References: <813@ms3.UUCP> <1246@mcgill-vision.UUCP> <1988Aug15.130550.8571@ateng.uucp> Sender: usenet@ucbvax.BERKELEY.EDU Reply-To: jsilva@cogsci.berkeley.edu.UUCP (John Silva) Organization: University of California, Berkeley Lines: 67 Here's a little demo program which should work fine on System V or Xenix systems. (doesn't work under BSD, due to the use of the termio structure). ---------------------------- CUT HERE ------------------------------- #include#include #include void Finish(); static struct termio term, saveterm; static long chars = 0; static long counter = 0; main(argc, argv) int argc; char *argv[]; { int old, i, timeout; char ch; timeout = 1; ioctl(fileno(stdin), TCGETA, &saveterm); for (i = 0; i < NSIG; i++) signal(i, Finish); if (--argc) { if (i = (0xFF & atoi(*(++argv)))) timeout = i; } printf("Using timeout of %.2fs\n", (float)timeout/10); printf("You may begin typing....\n"); ioctl(fileno(stdin), TCGETA, &term); term.c_lflag &= ~ICANON; term.c_cc[VMIN]='\0'; term.c_cc[VTIME]=(char)timeout; ioctl(fileno(stdin), TCSETA, &term); while(1) { if((ch = getchar()) != (char)EOF) chars++; counter++; } ioctl(fileno(stdin), TCSETA, &saveterm); exit(0); } void Finish(sig) int sig; { ioctl(fileno(stdin), TCSETA, &saveterm); printf("\nExiting, signal #%d\n", sig); printf("chars: %ld\ncounter: %ld\n",chars,counter); exit(0); } ------------------------------ CUT HERE ----------------------------- John Silva --- UUCP: ucbvax!cogsci!jsilva DOMAIN: jsilva@cogsci.berkeley.edu