Added Win32 synchro to FILEs (useful only for terminal handles).

diff --git a/files/file.c b/files/file.c
index 2b22167..c4ddb55 100644
--- a/files/file.c
+++ b/files/file.c
@@ -19,6 +19,7 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/mman.h>
+#include <sys/time.h>
 #include <time.h>
 #include <unistd.h>
 #include <utime.h>
@@ -40,6 +41,10 @@
 #define MAP_ANON MAP_ANONYMOUS
 #endif
 
+static BOOL32 FILE_Signaled(K32OBJ *ptr, DWORD tid);
+static BOOL32 FILE_Satisfied(K32OBJ *ptr, DWORD thread_id);
+static void FILE_AddWait(K32OBJ *ptr, DWORD tid);
+static void FILE_RemoveWait(K32OBJ *ptr, DWORD thread_id);
 static BOOL32 FILE_Read(K32OBJ *ptr, LPVOID lpBuffer, DWORD nNumberOfChars,
 			LPDWORD lpNumberOfChars, LPOVERLAPPED lpOverlapped);
 static BOOL32 FILE_Write(K32OBJ *ptr, LPCVOID lpBuffer, DWORD nNumberOfChars,
@@ -48,12 +53,11 @@
 
 const K32OBJ_OPS FILE_Ops =
 {
-    /* Object cannot be waited upon (FIXME: for now) */
-    NULL,              /* signaled */
-    NULL,              /* satisfied */
-    NULL,              /* add_wait */
-    NULL,              /* remove_wait */
-    FILE_Read,	        /* read */
+    FILE_Signaled,     /* signaled */
+    FILE_Satisfied,    /* satisfied */
+    FILE_AddWait,      /* add_wait */
+    FILE_RemoveWait,   /* remove_wait */
+    FILE_Read,	       /* read */
     FILE_Write,        /* write */
     FILE_Destroy       /* destroy */
 };
@@ -102,6 +106,42 @@
     return handle;
 }
 
+static BOOL32 FILE_Signaled(K32OBJ *ptr, DWORD thread_id)
+{
+	fd_set	fds,*readfds = NULL,*writefds = NULL;
+	struct timeval tv;
+	FILE_OBJECT *file = (FILE_OBJECT *)ptr;
+
+	FD_ZERO(&fds);
+	FD_SET(file->unix_handle,&fds);
+	if (file->mode == OF_READ) readfds = &fds;
+	if (file->mode == OF_WRITE) writefds = &fds;
+	if (file->mode == OF_READWRITE) {writefds = &fds; readfds = &fds;}
+	tv.tv_sec = 0;
+	tv.tv_usec = 0;
+	assert(readfds || writefds);
+	if (select(file->unix_handle+1,readfds,writefds,NULL,&tv)>0)
+		return TRUE; /* we triggered one fd. Whereever. */
+	return FALSE;
+}
+
+static void FILE_AddWait(K32OBJ *ptr, DWORD thread_id)
+{
+	TRACE(file,"(),stub\n");
+	return;
+}
+
+static void FILE_RemoveWait(K32OBJ *ptr, DWORD thread_id)
+{
+	TRACE(file,"(),stub\n");
+	return;
+}
+
+static BOOL32 FILE_Satisfied(K32OBJ *ptr, DWORD thread_id)
+{
+	TRACE(file,"(),stub\n");
+	return TRUE;
+}
 
 /* FIXME: lpOverlapped is ignored */
 static BOOL32 FILE_Read(K32OBJ *ptr, LPVOID lpBuffer, DWORD nNumberOfChars,