From 8c0ccdef357a5a940788cb81730f4847fe47606a Mon Sep 17 00:00:00 2001
From: pwpiwi <pwpiwi@users.noreply.github.com>
Date: Wed, 22 Mar 2017 22:15:24 +0100
Subject: [PATCH] fix: ukbhit() for OS X - don't use CMIN and CTIME - corrected
 comments

---
 client/util.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/client/util.c b/client/util.c
index 7c70d55d..d07c915c 100644
--- a/client/util.c
+++ b/client/util.c
@@ -27,6 +27,7 @@
 #ifndef _WIN32
 #include <termios.h>
 #include <sys/ioctl.h> 
+#include <unistd.h>
 
 int ukbhit(void)
 {
@@ -34,19 +35,18 @@ int ukbhit(void)
   int error;
   static struct termios Otty, Ntty;
 
-
-  if ( tcgetattr( 0, &Otty) == -1 ) return -1;
+  if ( tcgetattr(STDIN_FILENO, &Otty) == -1 ) return -1;
   Ntty = Otty;
 
-  Ntty.c_iflag          = 0;       /* input mode                */
-  Ntty.c_oflag          = 0;       /* output mode               */
-  Ntty.c_lflag         &= ~ICANON; /* raw mode */
-  Ntty.c_cc[VMIN]       = CMIN;    /* minimum time to wait      */
-  Ntty.c_cc[VTIME]      = CTIME;   /* minimum characters to wait for */
-
-  if (0 == (error = tcsetattr(0, TCSANOW, &Ntty))) {
-    error += ioctl(0, FIONREAD, &cnt);
-    error += tcsetattr(0, TCSANOW, &Otty);
+  Ntty.c_iflag          = 0x0000;   // input mode
+  Ntty.c_oflag          = 0x0000;   // output mode
+  Ntty.c_lflag         &= ~ICANON;  // control mode = raw
+  Ntty.c_cc[VMIN]       = 1;        // return if at least 1 character is in the queue
+  Ntty.c_cc[VTIME]      = 0;   	    // no timeout. Wait forever
+  
+  if (0 == (error = tcsetattr(STDIN_FILENO, TCSANOW, &Ntty))) {   // set new attributes
+    error += ioctl(STDIN_FILENO, FIONREAD, &cnt);                 // get number of characters availabe
+    error += tcsetattr(STDIN_FILENO, TCSANOW, &Otty);             // reset attributes
   }
 
   return ( error == 0 ? cnt : -1 );
-- 
2.39.5