home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #26 / NN_1992_26.iso / spool / comp / lang / c / 16477 < prev    next >
Encoding:
Text File  |  1992-11-14  |  2.7 KB  |  70 lines

  1. Newsgroups: comp.lang.c
  2. Path: sparky!uunet!portal!dfuller
  3. From: dfuller@portal.hq.videocart.com (Dave Fuller)
  4. Subject: Re: getch
  5. Message-ID: <Bxnxps.53K@portal.hq.videocart.com>
  6. Organization: VideOcart Inc.
  7. X-Newsreader: Tin 1.1 PL3
  8. References: <1992Nov13.022217.13742@pasteur.Berkeley.EDU>
  9. Date: Fri, 13 Nov 1992 16:27:27 GMT
  10. Lines: 58
  11.  
  12. c60c-2gf@web-2a.berkeley.edu writes:
  13. : At home, I run a version of Turbo C on my IBM.  There is a library function
  14. : with a prototype in conio.h called getch (and getche).  Is there an 
  15. : equivalent of this function on standard Unix systems.  I'm on a Sun, I 
  16. : believe (not a Sparc station though).  This question may be really
  17. : obvious, but I am not quite sure how all the specifics with input/output
  18. : work on the system (i.e. x-window control etc.) and I can't quite seem
  19. : to find getch.  The man page goes on and on abou'curses,' but I am still
  20. : pretty lost.  Any help would be appreciated (in email, please).  Thanks
  21. : -David Simpson
  22.  
  23. The getch() call is part of the curses package. What you are looking for
  24. is probably getc() getchar() or fgetc(). the g??? are macros and fgetc()
  25. is a function. getchar is just getc(stdin). getc and fgetc both take 
  26. a file pointer (stdin in your case).
  27.  
  28. the problem with these is that they do not get anything from stdio until
  29. the ENTER key
  30. is hit (or EOL or EOF, or whatever the delimiter is). What this means
  31. is that you get no immediate response to a key hit, AND it is echoed to 
  32. the stdout. so to get 1 key , they may type 100 keys, see them all, and
  33. then alert the program that it has a key in the buffer AFTER all input
  34. is done and ENTER is pressed. This probably is not what you want.  
  35.  
  36. Curses lessons cannot be given here, but here is a quick layout that 
  37. should help you.
  38.  
  39. in the main() start out by 
  40.    initscr(); - start curses.
  41.    cbreak(); - this makes each key available immediately instead of waiting
  42.                for a delimiter to occur (like getc(), getchar() and fgetc())
  43.                without this, keyboard info is buffered to tty.
  44.    noecho(); - use this if you don't want the keypresses echoed to screen.
  45.    keypad(stdscr, TRUE); turns the function keys, keypad translation on
  46.    
  47.    this should do it.
  48.  
  49.    now calls to getch() will return a keypress without delay, but any key
  50.    hit will NOT be echoed to screen, thanks to noecho(). If you want to 
  51.    echo, take this out.
  52.  
  53.    at the end to shut off curses just use 
  54.    
  55.    endwin()
  56.  
  57. on a Sun using cc you need to add libraries curses and termlib.
  58. i.e:  cc myprog.c -omyprog -lcurses -ltermlib
  59.  
  60. don't forget to #include <curses.h> in all files that use getch();
  61.  
  62. if you forget to use initscr() the program will coredump on you.
  63.  
  64. Dave Fuller
  65. dfuller@portal.hq.videocart.com
  66.  
  67.  
  68.