Exec a separate wine binary for every win32 process so that they run
in separate address spaces.
Run 16-bit tasks as Win32 threads, not processes.

diff --git a/include/main.h b/include/main.h
index 9341f36..b724c07 100644
--- a/include/main.h
+++ b/include/main.h
@@ -7,8 +7,8 @@
 
 #include "windef.h"
 
-extern BOOL MAIN_MainInit( int argc, char *argv[], BOOL win32 );
-extern BOOL MAIN_WineInit( int argc, char *argv[] );
+extern BOOL MAIN_MainInit( char *argv[] );
+extern void MAIN_WineInit(void);
 extern int MAIN_GetLanguageID(char*lang, char*country, char*charset, char*dialect);
 extern void MAIN_ParseDebugOptions(const char *options);
 extern void MAIN_ParseLanguageOption( const char *arg );
diff --git a/include/module.h b/include/module.h
index 34bf2fe..5844b02 100644
--- a/include/module.h
+++ b/include/module.h
@@ -183,6 +183,7 @@
 extern WINE_MODREF *MODULE_LoadLibraryExA( LPCSTR libname, HFILE hfile, DWORD flags );
 extern BOOL MODULE_FreeLibrary( WINE_MODREF *wm );
 extern WINE_MODREF *MODULE_FindModule( LPCSTR path );
+extern BOOL MODULE_GetBinaryType( HANDLE hfile, LPCSTR filename, LPDWORD lpBinaryType );
 extern HMODULE MODULE_CreateDummyModule( LPCSTR filename, HMODULE module32 );
 extern FARPROC16 WINAPI WIN32_GetProcAddress16( HMODULE hmodule, LPCSTR name );
 extern SEGPTR WINAPI HasGPHandler16( SEGPTR address );
@@ -201,12 +202,6 @@
 extern FARPROC16 NE_GetEntryPointEx( HMODULE16 hModule, WORD ordinal, BOOL16 snoop );
 extern BOOL16 NE_SetEntryPoint( HMODULE16 hModule, WORD ordinal, WORD offset );
 extern HANDLE NE_OpenFile( NE_MODULE *pModule );
-extern BOOL NE_CreateProcess( HANDLE hFile, LPCSTR filename, LPCSTR cmd_line, LPCSTR env, 
-                              LPSECURITY_ATTRIBUTES psa, LPSECURITY_ATTRIBUTES tsa,
-                              BOOL inherit, DWORD flags, LPSTARTUPINFOA startup,
-                              LPPROCESS_INFORMATION info );
-extern BOOL NE_InitProcess( NE_MODULE *pModule );
-
 
 /* loader/ne/resource.c */
 extern HGLOBAL16 WINAPI NE_DefResourceHandler(HGLOBAL16,HMODULE16,HRSRC16);
diff --git a/include/options.h b/include/options.h
index 7ba4f99..b202de4 100644
--- a/include/options.h
+++ b/include/options.h
@@ -70,7 +70,7 @@
 extern const char *argv0;
 
 extern void OPTIONS_Usage(void) WINE_NORETURN;
-extern void OPTIONS_ParseOptions( int argc, char *argv[] );
+extern void OPTIONS_ParseOptions( char *argv[] );
 
 /* Profile functions */
 
diff --git a/include/pe_image.h b/include/pe_image.h
index 809c289..4aaac26 100644
--- a/include/pe_image.h
+++ b/include/pe_image.h
@@ -41,11 +41,6 @@
 extern HMODULE PE_LoadImage( HANDLE hFile, LPCSTR filename );
 extern struct _wine_modref *PE_CreateModule( HMODULE hModule, LPCSTR filename,
                                              DWORD flags, BOOL builtin );
-extern BOOL PE_CreateProcess( HANDLE hFile, LPCSTR filename, LPCSTR cmd_line, LPCSTR env, 
-                              LPSECURITY_ATTRIBUTES psa, LPSECURITY_ATTRIBUTES tsa,
-                              BOOL inherit, DWORD flags, LPSTARTUPINFOA startup,
-                              LPPROCESS_INFORMATION info );
-
 extern void PE_InitTls(void);
 extern BOOL PE_InitDLL(struct _wine_modref *wm, DWORD type, LPVOID lpReserved);
 
diff --git a/include/process.h b/include/process.h
index 48a7c9b..f7bf458 100644
--- a/include/process.h
+++ b/include/process.h
@@ -88,9 +88,7 @@
     DWORD            unknown8;         /* c0 Unknown (NT) */
     LCID             locale;           /* c4 Locale to be queried by GetThreadLocale (NT) */
     /* The following are Wine-specific fields */
-    void            *server_pid;       /*    Server id for this process */
     HANDLE          *dos_handles;      /*    Handles mapping DOS -> Win32 */
-    struct _PDB     *next;             /*    List reference - list of PDB's */
     WORD             winver;           /*    Windows version figured out by VERSION_GetVersion */
     struct _SERVICETABLE *service_table; /*  Service table for service thread */
     HANDLE           idle_event;       /* event to signal, when the process is idle */
@@ -149,22 +147,17 @@
 
 /* memory/environ.c */
 extern BOOL ENV_BuildEnvironment(void);
-extern BOOL ENV_InheritEnvironment( PDB *pdb, LPCSTR env );
-extern void ENV_FreeEnvironment( PDB *pdb );
 
 /* scheduler/process.c */
-extern BOOL PROCESS_Init( BOOL win32 );
+extern BOOL PROCESS_Init(void);
+extern void PROCESS_InitWine( int argc, char *argv[] ) WINE_NORETURN;
+extern void PROCESS_InitWinelib( int argc, char *argv[] ) WINE_NORETURN;
 extern PDB *PROCESS_IdToPDB( DWORD id );
 extern void PROCESS_CallUserSignalProc( UINT uCode, HMODULE hModule );
-extern PDB *PROCESS_Create( struct _NE_MODULE *pModule, HFILE hFile,
-                            LPCSTR cmd_line, LPCSTR env, 
+extern BOOL PROCESS_Create( HFILE hFile, LPCSTR filename, LPCSTR cmd_line, LPCSTR env, 
                             LPSECURITY_ATTRIBUTES psa, LPSECURITY_ATTRIBUTES tsa,
                             BOOL inherit, DWORD flags,
                             STARTUPINFOA *startup, PROCESS_INFORMATION *info );
-extern BOOL PROCESS_CreateUnixProcess( LPCSTR filename, LPCSTR cmd_line, LPCSTR env, 
-                                       LPSECURITY_ATTRIBUTES psa, LPSECURITY_ATTRIBUTES tsa,
-                                       BOOL inherit, DWORD flags, LPSTARTUPINFOA startup,
-                                       LPPROCESS_INFORMATION info );
 
 static inline PDB * WINE_UNUSED PROCESS_Current(void)
 {
diff --git a/include/task.h b/include/task.h
index d3e6a12..eeb6939 100644
--- a/include/task.h
+++ b/include/task.h
@@ -144,7 +144,8 @@
 
 extern THHOOK *pThhook;
 
-extern BOOL TASK_Create( struct _NE_MODULE *pModule, UINT16 cmdShow );
+extern BOOL TASK_Create( struct _NE_MODULE *pModule, UINT16 cmdShow,
+                         struct _TEB *teb, LPCSTR cmdline, BYTE len );
 extern void TASK_KillTask( HTASK16 hTask );
 extern HTASK16 TASK_GetNextTask( HTASK16 hTask );
 extern void TASK_Reschedule(void);
diff --git a/include/thread.h b/include/thread.h
index 9939f32..e58b95d 100644
--- a/include/thread.h
+++ b/include/thread.h
@@ -120,7 +120,7 @@
 
 /* scheduler/thread.c */
 extern void THREAD_Init(void);
-extern TEB *THREAD_Create( struct _PDB *pdb, int fd, DWORD stack_size, BOOL alloc_stack16 );
+extern TEB *THREAD_Create( int fd, DWORD stack_size, BOOL alloc_stack16 );
 extern TEB *THREAD_InitStack( TEB *teb, DWORD stack_size, BOOL alloc_stack16 );
 extern BOOL THREAD_IsWin16( TEB *thdb );
 extern TEB *THREAD_IdToTEB( DWORD id );