Moved tape.c to dlls/kernel.
Moved critical section and resource update functions to dlls/kernel.
Started moving some of the thread functions too.

diff --git a/dlls/kernel/Makefile.in b/dlls/kernel/Makefile.in
index 8a26c28..2636e27 100644
--- a/dlls/kernel/Makefile.in
+++ b/dlls/kernel/Makefile.in
@@ -40,6 +40,8 @@
 	stress.c \
 	string.c \
 	sync.c \
+	tape.c \
+	thread.c \
 	thunk.c \
 	time.c \
 	toolhelp.c \
diff --git a/dlls/kernel/resource.c b/dlls/kernel/resource.c
index 29d5bd0..5389581 100644
--- a/dlls/kernel/resource.c
+++ b/dlls/kernel/resource.c
@@ -560,3 +560,81 @@
     if (!hRsrc) return 0;
     return ((PIMAGE_RESOURCE_DATA_ENTRY)hRsrc)->Size;
 }
+
+
+/***********************************************************************
+ *          BeginUpdateResourceA                 (KERNEL32.@)
+ */
+HANDLE WINAPI BeginUpdateResourceA( LPCSTR pFileName, BOOL bDeleteExistingResources )
+{
+  FIXME("(%s,%d): stub\n",debugstr_a(pFileName),bDeleteExistingResources);
+  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+  return 0;
+}
+
+
+/***********************************************************************
+ *          BeginUpdateResourceW                 (KERNEL32.@)
+ */
+HANDLE WINAPI BeginUpdateResourceW( LPCWSTR pFileName, BOOL bDeleteExistingResources )
+{
+  FIXME("(%s,%d): stub\n",debugstr_w(pFileName),bDeleteExistingResources);
+  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+  return 0;
+}
+
+
+/***********************************************************************
+ *          EndUpdateResourceA                 (KERNEL32.@)
+ */
+BOOL WINAPI EndUpdateResourceA( HANDLE hUpdate, BOOL fDiscard )
+{
+  FIXME("(%p,%d): stub\n",hUpdate, fDiscard);
+  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+  return FALSE;
+}
+
+
+/***********************************************************************
+ *          EndUpdateResourceW                 (KERNEL32.@)
+ */
+BOOL WINAPI EndUpdateResourceW( HANDLE hUpdate, BOOL fDiscard )
+{
+  FIXME("(%p,%d): stub\n",hUpdate, fDiscard);
+  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+  return FALSE;
+}
+
+
+/***********************************************************************
+ *           UpdateResourceA                 (KERNEL32.@)
+ */
+BOOL WINAPI UpdateResourceA(
+  HANDLE  hUpdate,
+  LPCSTR  lpType,
+  LPCSTR  lpName,
+  WORD    wLanguage,
+  LPVOID  lpData,
+  DWORD   cbData)
+{
+  FIXME(": stub\n");
+  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+  return FALSE;
+}
+
+
+/***********************************************************************
+ *           UpdateResourceW                 (KERNEL32.@)
+ */
+BOOL WINAPI UpdateResourceW(
+  HANDLE  hUpdate,
+  LPCWSTR lpType,
+  LPCWSTR lpName,
+  WORD    wLanguage,
+  LPVOID  lpData,
+  DWORD   cbData)
+{
+  FIXME(": stub\n");
+  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+  return FALSE;
+}
diff --git a/dlls/kernel/sync.c b/dlls/kernel/sync.c
index 3a6ac7a..2c5a301 100644
--- a/dlls/kernel/sync.c
+++ b/dlls/kernel/sync.c
@@ -54,6 +54,69 @@
 
 
 /***********************************************************************
+ *           InitializeCriticalSection   (KERNEL32.@)
+ */
+void WINAPI InitializeCriticalSection( CRITICAL_SECTION *crit )
+{
+    NTSTATUS ret = RtlInitializeCriticalSection( crit );
+    if (ret) RtlRaiseStatus( ret );
+}
+
+/***********************************************************************
+ *           InitializeCriticalSectionAndSpinCount   (KERNEL32.@)
+ */
+BOOL WINAPI InitializeCriticalSectionAndSpinCount( CRITICAL_SECTION *crit, DWORD spincount )
+{
+    NTSTATUS ret = RtlInitializeCriticalSectionAndSpinCount( crit, spincount );
+    if (ret) RtlRaiseStatus( ret );
+    return !ret;
+}
+
+/***********************************************************************
+ *           SetCriticalSectionSpinCount   (KERNEL32.@)
+ * This function is available on NT4SP3 or later, but not Win98
+ * It is SMP related
+ */
+DWORD WINAPI SetCriticalSectionSpinCount( CRITICAL_SECTION *crit, DWORD spincount )
+{
+    ULONG_PTR oldspincount = crit->SpinCount;
+    if(spincount) FIXME("critsection=%p: spincount=%ld not supported\n", crit, spincount);
+    crit->SpinCount = spincount;
+    return oldspincount;
+}
+
+/***********************************************************************
+ *           MakeCriticalSectionGlobal   (KERNEL32.@)
+ */
+void WINAPI MakeCriticalSectionGlobal( CRITICAL_SECTION *crit )
+{
+    /* let's assume that only one thread at a time will try to do this */
+    HANDLE sem = crit->LockSemaphore;
+    if (!sem) NtCreateSemaphore( &sem, SEMAPHORE_ALL_ACCESS, NULL, 0, 1 );
+    crit->LockSemaphore = ConvertToGlobalHandle( sem );
+}
+
+
+/***********************************************************************
+ *           ReinitializeCriticalSection   (KERNEL32.@)
+ */
+void WINAPI ReinitializeCriticalSection( CRITICAL_SECTION *crit )
+{
+    if ( !crit->LockSemaphore )
+        RtlInitializeCriticalSection( crit );
+}
+
+
+/***********************************************************************
+ *           UninitializeCriticalSection   (KERNEL32.@)
+ */
+void WINAPI UninitializeCriticalSection( CRITICAL_SECTION *crit )
+{
+    RtlDeleteCriticalSection( crit );
+}
+
+
+/***********************************************************************
  *           CreateEventA    (KERNEL32.@)
  */
 HANDLE WINAPI CreateEventA( SECURITY_ATTRIBUTES *sa, BOOL manual_reset,
@@ -1105,3 +1168,102 @@
     *hWritePipe = hw;
     return TRUE;
 }
+
+
+#ifdef __i386__
+
+/***********************************************************************
+ *		InterlockedCompareExchange (KERNEL32.@)
+ */
+/* LONG WINAPI InterlockedCompareExchange( PLONG dest, LONG xchg, LONG compare ); */
+__ASM_GLOBAL_FUNC(InterlockedCompareExchange,
+                  "movl 12(%esp),%eax\n\t"
+                  "movl 8(%esp),%ecx\n\t"
+                  "movl 4(%esp),%edx\n\t"
+                  "lock; cmpxchgl %ecx,(%edx)\n\t"
+                  "ret $12");
+
+/***********************************************************************
+ *		InterlockedExchange (KERNEL32.@)
+ */
+/* LONG WINAPI InterlockedExchange( PLONG dest, LONG val ); */
+__ASM_GLOBAL_FUNC(InterlockedExchange,
+                  "movl 8(%esp),%eax\n\t"
+                  "movl 4(%esp),%edx\n\t"
+                  "lock; xchgl %eax,(%edx)\n\t"
+                  "ret $8");
+
+/***********************************************************************
+ *		InterlockedExchangeAdd (KERNEL32.@)
+ */
+/* LONG WINAPI InterlockedExchangeAdd( PLONG dest, LONG incr ); */
+__ASM_GLOBAL_FUNC(InterlockedExchangeAdd,
+                  "movl 8(%esp),%eax\n\t"
+                  "movl 4(%esp),%edx\n\t"
+                  "lock; xaddl %eax,(%edx)\n\t"
+                  "ret $8");
+
+/***********************************************************************
+ *		InterlockedIncrement (KERNEL32.@)
+ */
+/* LONG WINAPI InterlockedIncrement( PLONG dest ); */
+__ASM_GLOBAL_FUNC(InterlockedIncrement,
+                  "movl 4(%esp),%edx\n\t"
+                  "movl $1,%eax\n\t"
+                  "lock; xaddl %eax,(%edx)\n\t"
+                  "incl %eax\n\t"
+                  "ret $4");
+
+/***********************************************************************
+ *		InterlockedDecrement (KERNEL32.@)
+ */
+__ASM_GLOBAL_FUNC(InterlockedDecrement,
+                  "movl 4(%esp),%edx\n\t"
+                  "movl $-1,%eax\n\t"
+                  "lock; xaddl %eax,(%edx)\n\t"
+                  "decl %eax\n\t"
+                  "ret $4");
+
+#else  /* __i386__ */
+
+/***********************************************************************
+ *		InterlockedCompareExchange (KERNEL32.@)
+ */
+LONG WINAPI InterlockedCompareExchange( PLONG dest, LONG xchg, LONG compare )
+{
+    return interlocked_cmpxchg( dest, xchg, compare );
+}
+
+/***********************************************************************
+ *		InterlockedExchange (KERNEL32.@)
+ */
+LONG WINAPI InterlockedExchange( PLONG dest, LONG val )
+{
+    return interlocked_xchg( dest, val );
+}
+
+/***********************************************************************
+ *		InterlockedExchangeAdd (KERNEL32.@)
+ */
+LONG WINAPI InterlockedExchangeAdd( PLONG dest, LONG incr )
+{
+    return interlocked_xchg_add( dest, incr );
+}
+
+/***********************************************************************
+ *		InterlockedIncrement (KERNEL32.@)
+ */
+LONG WINAPI InterlockedIncrement( PLONG dest )
+{
+    return interlocked_xchg_add( dest, 1 ) + 1;
+}
+
+/***********************************************************************
+ *		InterlockedDecrement (KERNEL32.@)
+ */
+LONG WINAPI InterlockedDecrement( PLONG dest )
+{
+    return interlocked_xchg_add( dest, -1 ) - 1;
+}
+
+#endif  /* __i386__ */
diff --git a/files/tape.c b/dlls/kernel/tape.c
similarity index 100%
rename from files/tape.c
rename to dlls/kernel/tape.c
diff --git a/dlls/kernel/thread.c b/dlls/kernel/thread.c
new file mode 100644
index 0000000..bd1eb93
--- /dev/null
+++ b/dlls/kernel/thread.c
@@ -0,0 +1,376 @@
+/*
+ * Win32 threads
+ *
+ * Copyright 1996 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <assert.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#ifdef HAVE_SYS_TIMES_H
+#include <sys/times.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#include "winbase.h"
+#include "winerror.h"
+#include "winnls.h"
+#include "thread.h"
+#include "wine/server.h"
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(thread);
+
+
+/***********************************************************************
+ * SetThreadContext [KERNEL32.@]  Sets context of thread.
+ *
+ * RETURNS
+ *    Success: TRUE
+ *    Failure: FALSE
+ */
+BOOL WINAPI SetThreadContext( HANDLE handle,           /* [in]  Handle to thread with context */
+                              const CONTEXT *context ) /* [in] Address of context structure */
+{
+    NTSTATUS status = NtSetContextThread( handle, context );
+    if (status) SetLastError( RtlNtStatusToDosError(status) );
+    return !status;
+}
+
+
+/***********************************************************************
+ * GetThreadContext [KERNEL32.@]  Retrieves context of thread.
+ *
+ * RETURNS
+ *    Success: TRUE
+ *    Failure: FALSE
+ */
+BOOL WINAPI GetThreadContext( HANDLE handle,     /* [in]  Handle to thread with context */
+                              CONTEXT *context ) /* [out] Address of context structure */
+{
+    NTSTATUS status = NtGetContextThread( handle, context );
+    if (status) SetLastError( RtlNtStatusToDosError(status) );
+    return !status;
+}
+
+
+/**********************************************************************
+ * SuspendThread [KERNEL32.@]  Suspends a thread.
+ *
+ * RETURNS
+ *    Success: Previous suspend count
+ *    Failure: 0xFFFFFFFF
+ */
+DWORD WINAPI SuspendThread( HANDLE hthread ) /* [in] Handle to the thread */
+{
+    DWORD ret;
+    NTSTATUS status = NtSuspendThread( hthread, &ret );
+
+    if (status)
+    {
+        ret = ~0U;
+        SetLastError( RtlNtStatusToDosError(status) );
+    }
+    return ret;
+}
+
+
+/**********************************************************************
+ * ResumeThread [KERNEL32.@]  Resumes a thread.
+ *
+ * Decrements a thread's suspend count.  When count is zero, the
+ * execution of the thread is resumed.
+ *
+ * RETURNS
+ *    Success: Previous suspend count
+ *    Failure: 0xFFFFFFFF
+ *    Already running: 0
+ */
+DWORD WINAPI ResumeThread( HANDLE hthread ) /* [in] Identifies thread to restart */
+{
+    DWORD ret;
+    NTSTATUS status = NtResumeThread( hthread, &ret );
+
+    if (status)
+    {
+        ret = ~0U;
+        SetLastError( RtlNtStatusToDosError(status) );
+    }
+    return ret;
+}
+
+
+/**********************************************************************
+ * GetThreadPriority [KERNEL32.@]  Returns priority for thread.
+ *
+ * RETURNS
+ *    Success: Thread's priority level.
+ *    Failure: THREAD_PRIORITY_ERROR_RETURN
+ */
+INT WINAPI GetThreadPriority(
+    HANDLE hthread) /* [in] Handle to thread */
+{
+    INT ret = THREAD_PRIORITY_ERROR_RETURN;
+    SERVER_START_REQ( get_thread_info )
+    {
+        req->handle = hthread;
+        req->tid_in = 0;
+        if (!wine_server_call_err( req )) ret = reply->priority;
+    }
+    SERVER_END_REQ;
+    return ret;
+}
+
+
+/**********************************************************************
+ * SetThreadPriority [KERNEL32.@]  Sets priority for thread.
+ *
+ * RETURNS
+ *    Success: TRUE
+ *    Failure: FALSE
+ */
+BOOL WINAPI SetThreadPriority(
+    HANDLE hthread, /* [in] Handle to thread */
+    INT priority)   /* [in] Thread priority level */
+{
+    BOOL ret;
+    SERVER_START_REQ( set_thread_info )
+    {
+        req->handle   = hthread;
+        req->priority = priority;
+        req->mask     = SET_THREAD_INFO_PRIORITY;
+        ret = !wine_server_call_err( req );
+    }
+    SERVER_END_REQ;
+    return ret;
+}
+
+
+/**********************************************************************
+ * GetThreadPriorityBoost [KERNEL32.@]  Returns priority boost for thread.
+ *
+ * Always reports that priority boost is disabled.
+ *
+ * RETURNS
+ *    Success: TRUE.
+ *    Failure: FALSE
+ */
+BOOL WINAPI GetThreadPriorityBoost(
+    HANDLE hthread, /* [in] Handle to thread */
+    PBOOL pstate)   /* [out] pointer to var that receives the boost state */
+{
+    if (pstate) *pstate = FALSE;
+    return NO_ERROR;
+}
+
+
+/**********************************************************************
+ * SetThreadPriorityBoost [KERNEL32.@]  Sets priority boost for thread.
+ *
+ * Priority boost is not implemented. Thsi function always returns
+ * FALSE and sets last error to ERROR_CALL_NOT_IMPLEMENTED
+ *
+ * RETURNS
+ *    Always returns FALSE to indicate a failure
+ */
+BOOL WINAPI SetThreadPriorityBoost(
+    HANDLE hthread, /* [in] Handle to thread */
+    BOOL disable)   /* [in] TRUE to disable priority boost */
+{
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return FALSE;
+}
+
+
+/**********************************************************************
+ *           SetThreadAffinityMask   (KERNEL32.@)
+ */
+DWORD WINAPI SetThreadAffinityMask( HANDLE hThread, DWORD dwThreadAffinityMask )
+{
+    DWORD ret;
+    SERVER_START_REQ( set_thread_info )
+    {
+        req->handle   = hThread;
+        req->affinity = dwThreadAffinityMask;
+        req->mask     = SET_THREAD_INFO_AFFINITY;
+        ret = !wine_server_call_err( req );
+        /* FIXME: should return previous value */
+    }
+    SERVER_END_REQ;
+    return ret;
+}
+
+
+/**********************************************************************
+ * SetThreadIdealProcessor [KERNEL32.@]  Obtains timing information.
+ *
+ * RETURNS
+ *    Success: Value of last call to SetThreadIdealProcessor
+ *    Failure: -1
+ */
+DWORD WINAPI SetThreadIdealProcessor(
+    HANDLE hThread,          /* [in] Specifies the thread of interest */
+    DWORD dwIdealProcessor)  /* [in] Specifies the new preferred processor */
+{
+    FIXME("(%p): stub\n",hThread);
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return -1L;
+}
+
+
+/***********************************************************************
+ * SetThreadExecutionState (KERNEL32.@)
+ *
+ * Informs the system that activity is taking place for
+ * power management purposes.
+ */
+EXECUTION_STATE WINAPI SetThreadExecutionState(EXECUTION_STATE flags)
+{
+    static EXECUTION_STATE current =
+        ES_SYSTEM_REQUIRED|ES_DISPLAY_REQUIRED|ES_USER_PRESENT;
+    EXECUTION_STATE old = current;
+
+    if (!(current & ES_CONTINUOUS) || (flags & ES_CONTINUOUS))
+        current = flags;
+    FIXME("(0x%lx): stub, harmless (power management).\n", flags);
+    return old;
+}
+
+
+/* callback for QueueUserAPC */
+static void CALLBACK call_user_apc( ULONG_PTR arg1, ULONG_PTR arg2, ULONG_PTR arg3 )
+{
+    PAPCFUNC func = (PAPCFUNC)arg1;
+    func( arg2 );
+}
+
+/***********************************************************************
+ *              QueueUserAPC  (KERNEL32.@)
+ */
+DWORD WINAPI QueueUserAPC( PAPCFUNC func, HANDLE hthread, ULONG_PTR data )
+{
+    NTSTATUS status = NtQueueApcThread( hthread, call_user_apc, (ULONG_PTR)func, data, 0 );
+
+    if (status) SetLastError( RtlNtStatusToDosError(status) );
+    return !status;
+}
+
+
+/**********************************************************************
+ * GetThreadTimes [KERNEL32.@]  Obtains timing information.
+ *
+ * RETURNS
+ *    Success: TRUE
+ *    Failure: FALSE
+ */
+BOOL WINAPI GetThreadTimes(
+    HANDLE thread,         /* [in]  Specifies the thread of interest */
+    LPFILETIME creationtime, /* [out] When the thread was created */
+    LPFILETIME exittime,     /* [out] When the thread was destroyed */
+    LPFILETIME kerneltime,   /* [out] Time thread spent in kernel mode */
+    LPFILETIME usertime)     /* [out] Time thread spent in user mode */
+{
+    BOOL ret = TRUE;
+
+    if (creationtime || exittime)
+    {
+        /* We need to do a server call to get the creation time or exit time */
+        /* This works on any thread */
+
+        SERVER_START_REQ( get_thread_info )
+        {
+            req->handle = thread;
+            req->tid_in = 0;
+            if ((ret = !wine_server_call_err( req )))
+            {
+                if (creationtime)
+                    RtlSecondsSince1970ToTime( reply->creation_time, (LARGE_INTEGER*)creationtime );
+                if (exittime)
+                    RtlSecondsSince1970ToTime( reply->exit_time, (LARGE_INTEGER*)exittime );
+            }
+        }
+        SERVER_END_REQ;
+    }
+    if (ret && (kerneltime || usertime))
+    {
+        /* We call times(2) for kernel time or user time */
+        /* We can only (portably) do this for the current thread */
+        if (thread == GetCurrentThread())
+        {
+            ULONGLONG time;
+            struct tms time_buf;
+            long clocks_per_sec = sysconf(_SC_CLK_TCK);
+
+            times(&time_buf);
+            if (kerneltime)
+            {
+                time = (ULONGLONG)time_buf.tms_stime * 10000000 / clocks_per_sec;
+                kerneltime->dwHighDateTime = time >> 32;
+                kerneltime->dwLowDateTime = (DWORD)time;
+            }
+            if (usertime)
+            {
+                time = (ULONGLONG)time_buf.tms_utime * 10000000 / clocks_per_sec;
+                usertime->dwHighDateTime = time >> 32;
+                usertime->dwLowDateTime = (DWORD)time;
+            }
+        }
+        else
+        {
+            if (kerneltime) kerneltime->dwHighDateTime = kerneltime->dwLowDateTime = 0;
+            if (usertime) usertime->dwHighDateTime = usertime->dwLowDateTime = 0;
+            FIXME("Cannot get kerneltime or usertime of other threads\n");
+        }
+    }
+    return ret;
+}
+
+
+/**********************************************************************
+ * VWin32_BoostThreadGroup [KERNEL.535]
+ */
+VOID WINAPI VWin32_BoostThreadGroup( DWORD threadId, INT boost )
+{
+    FIXME("(0x%08lx,%d): stub\n", threadId, boost);
+}
+
+
+/**********************************************************************
+ * VWin32_BoostThreadStatic [KERNEL.536]
+ */
+VOID WINAPI VWin32_BoostThreadStatic( DWORD threadId, INT boost )
+{
+    FIXME("(0x%08lx,%d): stub\n", threadId, boost);
+}
+
+
+/***********************************************************************
+ * GetCurrentThread [KERNEL32.@]  Gets pseudohandle for current thread
+ *
+ * RETURNS
+ *    Pseudohandle for the current thread
+ */
+#undef GetCurrentThread
+HANDLE WINAPI GetCurrentThread(void)
+{
+    return (HANDLE)0xfffffffe;
+}
diff --git a/dlls/ntdll/Makefile.in b/dlls/ntdll/Makefile.in
index 5992d8e..b0b1d13 100644
--- a/dlls/ntdll/Makefile.in
+++ b/dlls/ntdll/Makefile.in
@@ -13,7 +13,6 @@
 	$(TOPOBJDIR)/files/file.c \
 	$(TOPOBJDIR)/files/profile.c \
 	$(TOPOBJDIR)/files/smb.c \
-	$(TOPOBJDIR)/files/tape.c \
 	$(TOPOBJDIR)/if1632/builtin.c \
 	$(TOPOBJDIR)/if1632/relay.c \
 	$(TOPOBJDIR)/if1632/snoop.c \
@@ -45,7 +44,6 @@
 	$(TOPOBJDIR)/relay32/relay386.c \
 	$(TOPOBJDIR)/relay32/snoop.c \
 	$(TOPOBJDIR)/scheduler/client.c \
-	$(TOPOBJDIR)/scheduler/critsection.c \
 	$(TOPOBJDIR)/scheduler/fiber.c \
 	$(TOPOBJDIR)/scheduler/handle.c \
 	$(TOPOBJDIR)/scheduler/process.c \
@@ -56,7 +54,6 @@
 	$(TOPOBJDIR)/scheduler/thread.c \
 	$(TOPOBJDIR)/win32/device.c \
 	$(TOPOBJDIR)/win32/except.c \
-	$(TOPOBJDIR)/win32/kernel32.c \
 	$(TOPOBJDIR)/win32/newfns.c \
 	cdrom.c \
 	critsection.c \
diff --git a/scheduler/critsection.c b/scheduler/critsection.c
deleted file mode 100644
index 8fca8d4..0000000
--- a/scheduler/critsection.c
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Win32 critical sections
- *
- * Copyright 1998 Alexandre Julliard
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#include "config.h"
-#include "wine/port.h"
-
-#include <assert.h>
-#include <stdio.h>
-#include <sys/types.h>
-
-#include "winerror.h"
-#include "winbase.h"
-#include "winternl.h"
-#include "wine/debug.h"
-#include "thread.h"
-
-WINE_DEFAULT_DEBUG_CHANNEL(win32);
-WINE_DECLARE_DEBUG_CHANNEL(relay);
-
-/***********************************************************************
- *           InitializeCriticalSection   (KERNEL32.@)
- */
-void WINAPI InitializeCriticalSection( CRITICAL_SECTION *crit )
-{
-    NTSTATUS ret = RtlInitializeCriticalSection( crit );
-    if (ret) RtlRaiseStatus( ret );
-}
-
-/***********************************************************************
- *           InitializeCriticalSectionAndSpinCount   (KERNEL32.@)
- */
-BOOL WINAPI InitializeCriticalSectionAndSpinCount( CRITICAL_SECTION *crit, DWORD spincount )
-{
-    NTSTATUS ret = RtlInitializeCriticalSectionAndSpinCount( crit, spincount );
-    if (ret) RtlRaiseStatus( ret );
-    return !ret;
-}
-
-/***********************************************************************
- *           SetCriticalSectionSpinCount   (KERNEL32.@)
- * This function is available on NT4SP3 or later, but not Win98
- * It is SMP related
- */
-DWORD WINAPI SetCriticalSectionSpinCount( CRITICAL_SECTION *crit, DWORD spincount )
-{
-    ULONG_PTR oldspincount = crit->SpinCount;
-    if(spincount) FIXME("critsection=%p: spincount=%ld not supported\n", crit, spincount);
-    crit->SpinCount = spincount;
-    return oldspincount;
-}
-
-/***********************************************************************
- *           MakeCriticalSectionGlobal   (KERNEL32.@)
- */
-void WINAPI MakeCriticalSectionGlobal( CRITICAL_SECTION *crit )
-{
-    /* let's assume that only one thread at a time will try to do this */
-    HANDLE sem = crit->LockSemaphore;
-    if (!sem) NtCreateSemaphore( &sem, SEMAPHORE_ALL_ACCESS, NULL, 0, 1 );
-    crit->LockSemaphore = ConvertToGlobalHandle( sem );
-}
-
-
-/***********************************************************************
- *           ReinitializeCriticalSection   (KERNEL32.@)
- */
-void WINAPI ReinitializeCriticalSection( CRITICAL_SECTION *crit )
-{
-    if ( !crit->LockSemaphore )
-        RtlInitializeCriticalSection( crit );
-}
-
-
-/***********************************************************************
- *           UninitializeCriticalSection   (KERNEL32.@)
- */
-void WINAPI UninitializeCriticalSection( CRITICAL_SECTION *crit )
-{
-    RtlDeleteCriticalSection( crit );
-}
-
-#ifdef __i386__
-
-/***********************************************************************
- *		InterlockedCompareExchange (KERNEL32.@)
- */
-/* LONG WINAPI InterlockedCompareExchange( PLONG dest, LONG xchg, LONG compare ); */
-__ASM_GLOBAL_FUNC(InterlockedCompareExchange,
-                  "movl 12(%esp),%eax\n\t"
-                  "movl 8(%esp),%ecx\n\t"
-                  "movl 4(%esp),%edx\n\t"
-                  "lock; cmpxchgl %ecx,(%edx)\n\t"
-                  "ret $12");
-
-/***********************************************************************
- *		InterlockedExchange (KERNEL32.@)
- */
-/* LONG WINAPI InterlockedExchange( PLONG dest, LONG val ); */
-__ASM_GLOBAL_FUNC(InterlockedExchange,
-                  "movl 8(%esp),%eax\n\t"
-                  "movl 4(%esp),%edx\n\t"
-                  "lock; xchgl %eax,(%edx)\n\t"
-                  "ret $8");
-
-/***********************************************************************
- *		InterlockedExchangeAdd (KERNEL32.@)
- */
-/* LONG WINAPI InterlockedExchangeAdd( PLONG dest, LONG incr ); */
-__ASM_GLOBAL_FUNC(InterlockedExchangeAdd,
-                  "movl 8(%esp),%eax\n\t"
-                  "movl 4(%esp),%edx\n\t"
-                  "lock; xaddl %eax,(%edx)\n\t"
-                  "ret $8");
-
-/***********************************************************************
- *		InterlockedIncrement (KERNEL32.@)
- */
-/* LONG WINAPI InterlockedIncrement( PLONG dest ); */
-__ASM_GLOBAL_FUNC(InterlockedIncrement,
-                  "movl 4(%esp),%edx\n\t"
-                  "movl $1,%eax\n\t"
-                  "lock; xaddl %eax,(%edx)\n\t"
-                  "incl %eax\n\t"
-                  "ret $4");
-
-/***********************************************************************
- *		InterlockedDecrement (KERNEL32.@)
- */
-__ASM_GLOBAL_FUNC(InterlockedDecrement,
-                  "movl 4(%esp),%edx\n\t"
-                  "movl $-1,%eax\n\t"
-                  "lock; xaddl %eax,(%edx)\n\t"
-                  "decl %eax\n\t"
-                  "ret $4");
-
-#else  /* __i386__ */
-
-/***********************************************************************
- *		InterlockedCompareExchange (KERNEL32.@)
- */
-LONG WINAPI InterlockedCompareExchange( PLONG dest, LONG xchg, LONG compare )
-{
-    return interlocked_cmpxchg( dest, xchg, compare );
-}
-
-/***********************************************************************
- *		InterlockedExchange (KERNEL32.@)
- */
-LONG WINAPI InterlockedExchange( PLONG dest, LONG val )
-{
-    return interlocked_xchg( dest, val );
-}
-
-/***********************************************************************
- *		InterlockedExchangeAdd (KERNEL32.@)
- */
-LONG WINAPI InterlockedExchangeAdd( PLONG dest, LONG incr )
-{
-    return interlocked_xchg_add( dest, incr );
-}
-
-/***********************************************************************
- *		InterlockedIncrement (KERNEL32.@)
- */
-LONG WINAPI InterlockedIncrement( PLONG dest )
-{
-    return interlocked_xchg_add( dest, 1 ) + 1;
-}
-
-/***********************************************************************
- *		InterlockedDecrement (KERNEL32.@)
- */
-LONG WINAPI InterlockedDecrement( PLONG dest )
-{
-    return interlocked_xchg_add( dest, -1 ) - 1;
-}
-
-#endif  /* __i386__ */
diff --git a/scheduler/thread.c b/scheduler/thread.c
index 24792f9..e285465 100644
--- a/scheduler/thread.c
+++ b/scheduler/thread.c
@@ -348,154 +348,6 @@
     return ret;
 }
 
-/***********************************************************************
- * SetThreadContext [KERNEL32.@]  Sets context of thread.
- *
- * RETURNS
- *    Success: TRUE
- *    Failure: FALSE
- */
-BOOL WINAPI SetThreadContext( HANDLE handle,           /* [in]  Handle to thread with context */
-                              const CONTEXT *context ) /* [in] Address of context structure */
-{
-    NTSTATUS status = NtSetContextThread( handle, context );
-    if (status) SetLastError( RtlNtStatusToDosError(status) );
-    return !status;
-}
-
-
-/***********************************************************************
- * GetThreadContext [KERNEL32.@]  Retrieves context of thread.
- *
- * RETURNS
- *    Success: TRUE
- *    Failure: FALSE
- */
-BOOL WINAPI GetThreadContext( HANDLE handle,     /* [in]  Handle to thread with context */
-                              CONTEXT *context ) /* [out] Address of context structure */
-{
-    NTSTATUS status = NtGetContextThread( handle, context );
-    if (status) SetLastError( RtlNtStatusToDosError(status) );
-    return !status;
-}
-
-
-/**********************************************************************
- * GetThreadPriority [KERNEL32.@]  Returns priority for thread.
- *
- * RETURNS
- *    Success: Thread's priority level.
- *    Failure: THREAD_PRIORITY_ERROR_RETURN
- */
-INT WINAPI GetThreadPriority(
-    HANDLE hthread) /* [in] Handle to thread */
-{
-    INT ret = THREAD_PRIORITY_ERROR_RETURN;
-    SERVER_START_REQ( get_thread_info )
-    {
-        req->handle = hthread;
-        req->tid_in = 0;
-        if (!wine_server_call_err( req )) ret = reply->priority;
-    }
-    SERVER_END_REQ;
-    return ret;
-}
-
-
-/**********************************************************************
- * SetThreadPriority [KERNEL32.@]  Sets priority for thread.
- *
- * RETURNS
- *    Success: TRUE
- *    Failure: FALSE
- */
-BOOL WINAPI SetThreadPriority(
-    HANDLE hthread, /* [in] Handle to thread */
-    INT priority)   /* [in] Thread priority level */
-{
-    BOOL ret;
-    SERVER_START_REQ( set_thread_info )
-    {
-        req->handle   = hthread;
-        req->priority = priority;
-        req->mask     = SET_THREAD_INFO_PRIORITY;
-        ret = !wine_server_call_err( req );
-    }
-    SERVER_END_REQ;
-    return ret;
-}
-
-
-/**********************************************************************
- * GetThreadPriorityBoost [KERNEL32.@]  Returns priority boost for thread.
- *
- * Always reports that priority boost is disabled.
- *
- * RETURNS
- *    Success: TRUE.
- *    Failure: FALSE
- */
-BOOL WINAPI GetThreadPriorityBoost(
-    HANDLE hthread, /* [in] Handle to thread */
-    PBOOL pstate)   /* [out] pointer to var that receives the boost state */
-{
-    if (pstate) *pstate = FALSE;
-    return NO_ERROR;
-}
-
-
-/**********************************************************************
- * SetThreadPriorityBoost [KERNEL32.@]  Sets priority boost for thread.
- *
- * Priority boost is not implemented. Thsi function always returns
- * FALSE and sets last error to ERROR_CALL_NOT_IMPLEMENTED
- *
- * RETURNS
- *    Always returns FALSE to indicate a failure
- */
-BOOL WINAPI SetThreadPriorityBoost(
-    HANDLE hthread, /* [in] Handle to thread */
-    BOOL disable)   /* [in] TRUE to disable priority boost */
-{
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return FALSE;
-}
-
-
-/**********************************************************************
- *           SetThreadAffinityMask   (KERNEL32.@)
- */
-DWORD WINAPI SetThreadAffinityMask( HANDLE hThread, DWORD dwThreadAffinityMask )
-{
-    DWORD ret;
-    SERVER_START_REQ( set_thread_info )
-    {
-        req->handle   = hThread;
-        req->affinity = dwThreadAffinityMask;
-        req->mask     = SET_THREAD_INFO_AFFINITY;
-        ret = !wine_server_call_err( req );
-        /* FIXME: should return previous value */
-    }
-    SERVER_END_REQ;
-    return ret;
-}
-
-/**********************************************************************
- * SetThreadIdealProcessor [KERNEL32.@]  Obtains timing information.
- *
- * RETURNS
- *    Success: Value of last call to SetThreadIdealProcessor
- *    Failure: -1
- */
-DWORD WINAPI SetThreadIdealProcessor(
-    HANDLE hThread,          /* [in] Specifies the thread of interest */
-    DWORD dwIdealProcessor)  /* [in] Specifies the new preferred processor */
-{
-    FIXME("(%p): stub\n",hThread);
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return -1L;
-}
-
 /**********************************************************************
  * TerminateThread [KERNEL32.@]  Terminates a thread
  *
@@ -538,52 +390,6 @@
 }
 
 
-/**********************************************************************
- * ResumeThread [KERNEL32.@]  Resumes a thread.
- *
- * Decrements a thread's suspend count.  When count is zero, the
- * execution of the thread is resumed.
- *
- * RETURNS
- *    Success: Previous suspend count
- *    Failure: 0xFFFFFFFF
- *    Already running: 0
- */
-DWORD WINAPI ResumeThread( HANDLE hthread ) /* [in] Identifies thread to restart */
-{
-    DWORD ret;
-    NTSTATUS status = NtResumeThread( hthread, &ret );
-
-    if (status)
-    {
-        ret = ~0U;
-        SetLastError( RtlNtStatusToDosError(status) );
-    }
-    return ret;
-}
-
-
-/**********************************************************************
- * SuspendThread [KERNEL32.@]  Suspends a thread.
- *
- * RETURNS
- *    Success: Previous suspend count
- *    Failure: 0xFFFFFFFF
- */
-DWORD WINAPI SuspendThread( HANDLE hthread ) /* [in] Handle to the thread */
-{
-    DWORD ret;
-    NTSTATUS status = NtSuspendThread( hthread, &ret );
-
-    if (status)
-    {
-        ret = ~0U;
-        SetLastError( RtlNtStatusToDosError(status) );
-    }
-    return ret;
-}
-
-
 /* callback for QueueUserAPC */
 static void CALLBACK call_user_apc( ULONG_PTR arg1, ULONG_PTR arg2, ULONG_PTR arg3 )
 {
@@ -603,106 +409,6 @@
 }
 
 
-/**********************************************************************
- * GetThreadTimes [KERNEL32.@]  Obtains timing information.
- *
- * RETURNS
- *    Success: TRUE
- *    Failure: FALSE
- */
-BOOL WINAPI GetThreadTimes(
-    HANDLE thread,         /* [in]  Specifies the thread of interest */
-    LPFILETIME creationtime, /* [out] When the thread was created */
-    LPFILETIME exittime,     /* [out] When the thread was destroyed */
-    LPFILETIME kerneltime,   /* [out] Time thread spent in kernel mode */
-    LPFILETIME usertime)     /* [out] Time thread spent in user mode */
-{
-    BOOL ret = TRUE;
-
-    if (creationtime || exittime)
-    {
-        /* We need to do a server call to get the creation time or exit time */
-        /* This works on any thread */
-
-        SERVER_START_REQ( get_thread_info )
-        {
-            req->handle = thread;
-            req->tid_in = 0;
-            if ((ret = !wine_server_call_err( req )))
-            {
-                if (creationtime)
-                    RtlSecondsSince1970ToTime( reply->creation_time, (LARGE_INTEGER*)creationtime );
-                if (exittime)
-                    RtlSecondsSince1970ToTime( reply->exit_time, (LARGE_INTEGER*)exittime );
-            }
-        }
-        SERVER_END_REQ;
-    }
-    if (ret && (kerneltime || usertime))
-    {
-        /* We call times(2) for kernel time or user time */
-        /* We can only (portably) do this for the current thread */
-        if (thread == GetCurrentThread())
-        {
-            ULONGLONG time;
-            struct tms time_buf;
-            long clocks_per_sec = sysconf(_SC_CLK_TCK);
-
-            times(&time_buf);
-            if (kerneltime)
-            {
-                time = (ULONGLONG)time_buf.tms_stime * 10000000 / clocks_per_sec;
-                kerneltime->dwHighDateTime = time >> 32;
-                kerneltime->dwLowDateTime = (DWORD)time;
-            }
-            if (usertime)
-            {
-                time = (ULONGLONG)time_buf.tms_utime * 10000000 / clocks_per_sec;
-                usertime->dwHighDateTime = time >> 32;
-                usertime->dwLowDateTime = (DWORD)time;
-            }
-        }
-        else
-        {
-            if (kerneltime) kerneltime->dwHighDateTime = kerneltime->dwLowDateTime = 0;
-            if (usertime) usertime->dwHighDateTime = usertime->dwLowDateTime = 0;
-            FIXME("Cannot get kerneltime or usertime of other threads\n");
-        }
-    }
-    return ret;
-}
-
-
-/**********************************************************************
- * VWin32_BoostThreadGroup [KERNEL.535]
- */
-VOID WINAPI VWin32_BoostThreadGroup( DWORD threadId, INT boost )
-{
-    FIXME("(0x%08lx,%d): stub\n", threadId, boost);
-}
-
-/**********************************************************************
- * VWin32_BoostThreadStatic [KERNEL.536]
- */
-VOID WINAPI VWin32_BoostThreadStatic( DWORD threadId, INT boost )
-{
-    FIXME("(0x%08lx,%d): stub\n", threadId, boost);
-}
-
-
-/***********************************************************************
- * GetCurrentThread [KERNEL32.@]  Gets pseudohandle for current thread
- *
- * RETURNS
- *    Pseudohandle for the current thread
- */
-#undef GetCurrentThread
-HANDLE WINAPI GetCurrentThread(void)
-{
-    return (HANDLE)0xfffffffe;
-}
-
-
 /***********************************************************************
  * ProcessIdToSessionId   (KERNEL32.@)
  * This function is available on Terminal Server 4SP4 and Windows 2000
@@ -716,24 +422,6 @@
 	return TRUE;
 }
 
-/***********************************************************************
- * SetThreadExecutionState (KERNEL32.@)
- *
- * Informs the system that activity is taking place for
- * power management purposes.
- */
-EXECUTION_STATE WINAPI SetThreadExecutionState(EXECUTION_STATE flags)
-{
-    static EXECUTION_STATE current =
-	    ES_SYSTEM_REQUIRED|ES_DISPLAY_REQUIRED|ES_USER_PRESENT;
-    EXECUTION_STATE old = current;
-
-    if (!(current & ES_CONTINUOUS) || (flags & ES_CONTINUOUS))
-        current = flags;
-    FIXME("(0x%lx): stub, harmless (power management).\n", flags);
-    return old;
-}
-
 
 #ifdef __i386__
 
diff --git a/win32/kernel32.c b/win32/kernel32.c
deleted file mode 100644
index 6478819..0000000
--- a/win32/kernel32.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * KERNEL32 thunks and other undocumented stuff
- *
- * Copyright 1997-1998 Marcus Meissner
- * Copyright 1998      Ulrich Weigand
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#include "config.h"
-
-#include <string.h>
-#include <sys/types.h>
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#include "windef.h"
-#include "winbase.h"
-#include "wine/winbase16.h"
-#include "winerror.h"
-#include "wine/debug.h"
-
-WINE_DEFAULT_DEBUG_CHANNEL(win32);
-
-/***********************************************************************
- *          BeginUpdateResourceA                 (KERNEL32.@)
- */
-HANDLE WINAPI BeginUpdateResourceA( LPCSTR pFileName, BOOL bDeleteExistingResources )
-{
-  FIXME("(%s,%d): stub\n",debugstr_a(pFileName),bDeleteExistingResources);
-  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-  return 0;
-}
-
-/***********************************************************************
- *          BeginUpdateResourceW                 (KERNEL32.@)
- */
-HANDLE WINAPI BeginUpdateResourceW( LPCWSTR pFileName, BOOL bDeleteExistingResources )
-{
-
-  FIXME("(%s,%d): stub\n",debugstr_w(pFileName),bDeleteExistingResources);
-  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-  return 0;
-}
-
-/***********************************************************************
- *          EndUpdateResourceA                 (KERNEL32.@)
- */
-BOOL WINAPI EndUpdateResourceA( HANDLE hUpdate, BOOL fDiscard )
-{
-
-  FIXME("(%p,%d): stub\n",hUpdate, fDiscard);
-  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-  return FALSE;
-}
-
-/***********************************************************************
- *          EndUpdateResourceW                 (KERNEL32.@)
- */
-BOOL WINAPI EndUpdateResourceW( HANDLE hUpdate, BOOL fDiscard )
-{
-  FIXME("(%p,%d): stub\n",hUpdate, fDiscard);
-  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-  return FALSE;
-}
-
-/***********************************************************************
- *           UpdateResourceA                 (KERNEL32.@)
- */
-BOOL WINAPI UpdateResourceA(
-  HANDLE  hUpdate,
-  LPCSTR  lpType,
-  LPCSTR  lpName,
-  WORD    wLanguage,
-  LPVOID  lpData,
-  DWORD   cbData) {
-
-  FIXME(": stub\n");
-  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-  return FALSE;
-}
-
-/***********************************************************************
- *           UpdateResourceW                 (KERNEL32.@)
- */
-BOOL WINAPI UpdateResourceW(
-  HANDLE  hUpdate,
-  LPCWSTR lpType,
-  LPCWSTR lpName,
-  WORD    wLanguage,
-  LPVOID  lpData,
-  DWORD   cbData) {
-
-  FIXME(": stub\n");
-  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-  return FALSE;
-}