ets@wrkgrp.COM (Edward T Spire) (04/24/91)
Perhaps I'm doing something wrong and one of you folks can see it... I'm writing a keyboard test utility, and I'm at the spot where I'm trying to see exactly what character(s) are coming from a particular key. So I set nodelay() and go into a loop, sleeping a second and seeing if getch() has any input for me. If not, I keep looping. If so, I take all that getch() has buffered up as what the key sent. Well, this works fine on all kinds of platforms, but not on my old Sun-3 running SunOS 4.0.0. There, once you fall on any key, getch() just starts returning 0, and never stops. Here's a test program that shows the problem. Run it without touching the keyboard and it shows 20 getch() return codes of -1. On most platforms, if you type keys, getch() hands them to the program, and the program echos them back to the screen, and then getch() goes back to handing it -1's while the buffer is empty. On the Sun-3 SunOS 4.0.0 once you fall on any key, all getch() ever returns from that point on is 0. #include <ctype.h> #include <stdio.h> #define NLS 1 #include <curses.h> WINDOW *win; main(argc, argv) int argc; char *argv[]; { int i, j; win = initscr(); keypad(stdscr, TRUE); raw(); noecho(); nonl(); notimeout(stdscr,TRUE); clear(); nodelay(stdscr,TRUE); for (i=0;i<20;i++) { sleep(1); j = getch(); move(i,0); printw("%i",j); refresh(); } endwin(); exit(0); } And another minor point, refresh() doesn't seem to do any output if there's data in the input buffer! That doesn't seem right to me, and makes me even more suspicious that I'm just plain doing something wrong here... Anybody got any ideas? ======================================================================== Ed Spire email: ets@wrkgrp.com (on uunet) The Workstation Group voice: 800-228-0255 6300 River Road, Suite 700 or 708-696-4800 Rosemont, Illinois 60018 fax: 708-696-2277