Index: libc/generic/async.c
===================================================================
--- libc/generic/async.c	(revision 24089699428d6b6e0446e1ca5e9cf13c60d10578)
+++ libc/generic/async.c	(revision 860294986ec6e7d55a73d99e924b1b0f7a23bbf6)
@@ -286,4 +286,7 @@
 	
 	assert(PS_connection);
+
+	if (usecs < 0) /* TODO: let it get through the ipc_call once */
+		return 0;
 
 	futex_down(&async_futex);
@@ -656,4 +659,8 @@
 	connection_t *conn;
 
+	/* TODO: Let it go through the event read at least once */
+	if (timeout < 0)
+		return ETIMEOUT;
+
 	futex_down(&async_futex);
 	if (msg->done) {
Index: libc/include/sys/time.h
===================================================================
--- libc/include/sys/time.h	(revision 24089699428d6b6e0446e1ca5e9cf13c60d10578)
+++ libc/include/sys/time.h	(revision 860294986ec6e7d55a73d99e924b1b0f7a23bbf6)
@@ -34,6 +34,6 @@
 #define DST_NONE 0
 
-typedef sysarg_t time_t;
-typedef sysarg_t suseconds_t;
+typedef long time_t;
+typedef long suseconds_t;
 
 struct timeval {
Index: tetris/input.c
===================================================================
--- tetris/input.c	(revision 24089699428d6b6e0446e1ca5e9cf13c60d10578)
+++ tetris/input.c	(revision 860294986ec6e7d55a73d99e924b1b0f7a23bbf6)
@@ -42,4 +42,5 @@
 #include <sys/types.h>
 #include <sys/time.h>
+#include <stdio.h>
 
 #include <errno.h>
@@ -91,6 +92,4 @@
 	int rc;
 
-#define	NILTZ ((struct timezone *)0)
-
 	/*
 	 * Someday, select() will do this for us.
@@ -99,5 +98,5 @@
 	 */
 	if (tvp) {
-		(void) gettimeofday(&starttv, NILTZ);
+		(void) gettimeofday(&starttv, NULL);
 		endtv = *tvp;
 		s = &endtv;
@@ -108,5 +107,7 @@
 		if (!getchar_inprog)
 			getchar_inprog = async_send_2(1,CONSOLE_GETCHAR,0,0,&charcall);
-		if (async_wait_timeout(getchar_inprog, &rc, s->tv_usec) == ETIMEOUT) {
+		if (!s) 
+			async_wait_for(getchar_inprog, &rc);
+		else if (async_wait_timeout(getchar_inprog, &rc, s->tv_usec) == ETIMEOUT) {
 			tvp->tv_sec = 0;
 			tvp->tv_usec = 0;
@@ -121,5 +122,5 @@
 	if (tvp) {
 		/* since there is input, we may not have timed out */
-		(void) gettimeofday(&endtv, NILTZ);
+		(void) gettimeofday(&endtv, NULL);
 		TV_SUB(&endtv, &starttv);
 		TV_SUB(tvp, &endtv);	/* adjust *tvp by elapsed time */
Index: tetris/screen.c
===================================================================
--- tetris/screen.c	(revision 24089699428d6b6e0446e1ca5e9cf13c60d10578)
+++ tetris/screen.c	(revision 860294986ec6e7d55a73d99e924b1b0f7a23bbf6)
@@ -160,5 +160,5 @@
 		char smallscr[55];
 
-		(void)snprintf(smallscr, sizeof(smallscr),
+		snprintf(smallscr, sizeof(smallscr),
 		    "the screen is too small (must be at least %dx%d)",
 		    MINROWS, MINCOLS);
@@ -204,5 +204,5 @@
 	if (score != curscore) {
 		moveto(0, 0);
-		(void) printf("Score: %d", score);
+		printf("Score: %d", score);
 		curscore = score;
 	}
@@ -252,4 +252,8 @@
 			*sp = so;
 			if (i != ccol) {
+				if (cur_so) {
+					resume_normal();
+					cur_so = 0;
+				}
 				moveto(RTOD(j), CTOD(i));
 			}
@@ -262,4 +266,5 @@
 			}
 			putstr("  ");
+
 			ccol = i + 1;
 			/*
@@ -282,6 +287,6 @@
 		}
 	}
-	resume_normal();
-
+	if (cur_so)
+		resume_normal();
  	fflush();
 }
