Perform NE_InitProcess in the context of the new task.
diff --git a/loader/task.c b/loader/task.c
index 54941fa..5ec6df4 100644
--- a/loader/task.c
+++ b/loader/task.c
@@ -213,57 +213,6 @@
/***********************************************************************
- * TASK_CallToStart
- *
- * 32-bit entry point for a new task. This function is responsible for
- * setting up the registers and jumping to the 16-bit entry point.
- */
-void TASK_CallToStart(void)
-{
- TDB *pTask = (TDB *)GlobalLock16( GetCurrentTask() );
- NE_MODULE *pModule = NE_GetPtr( pTask->hModule );
- SEGTABLEENTRY *pSegTable = NE_SEG_TABLE( pModule );
- CONTEXT86 context;
-
- SYSLEVEL_EnterWin16Lock();
-
- /* Add task to 16-bit scheduler pool if necessary */
- if ( hCurrentTask != GetCurrentTask() )
- TASK_Reschedule();
-
- /* Registers at initialization must be:
- * ax zero
- * bx stack size in bytes
- * cx heap size in bytes
- * si previous app instance
- * di current app instance
- * bp zero
- * es selector to the PSP
- * ds dgroup of the application
- * ss stack selector
- * sp top of the stack
- */
-
- memset( &context, 0, sizeof(context) );
- CS_reg(&context) = GlobalHandleToSel16(pSegTable[pModule->cs - 1].hSeg);
- DS_reg(&context) = GlobalHandleToSel16(pTask->hInstance);
- ES_reg(&context) = pTask->hPDB;
- EIP_reg(&context) = pModule->ip;
- EBX_reg(&context) = pModule->stack_size;
- ECX_reg(&context) = pModule->heap_size;
- EDI_reg(&context) = pTask->hInstance;
- ESI_reg(&context) = pTask->hPrevInstance;
-
- TRACE("Starting main program: cs:ip=%04lx:%04lx ds=%04lx ss:sp=%04x:%04x\n",
- CS_reg(&context), EIP_reg(&context), DS_reg(&context),
- SELECTOROF(pTask->teb->cur_stack),
- OFFSETOF(pTask->teb->cur_stack) );
-
- Callbacks->CallRegisterShortProc( &context, 0 );
-}
-
-
-/***********************************************************************
* TASK_Create
*
* NOTE: This routine might be called by a Win32 thread. Thus, we need
@@ -287,18 +236,18 @@
/* Fill the task structure */
- pTask->nEvents = 0;
- pTask->hSelf = hTask;
- pTask->flags = 0;
+ pTask->hSelf = hTask;
- if (teb->tibflags & TEBF_WIN32) pTask->flags |= TDBF_WIN32;
+ if (teb->tibflags & TEBF_WIN32)
+ {
+ pTask->flags |= TDBF_WIN32;
+ pTask->hInstance = pModule->self;
+ pTask->hPrevInstance = 0;
+ /* NOTE: for 16-bit tasks, the instance handles are updated later on
+ in NE_InitProcess */
+ }
if (pModule->lpDosTask) pTask->flags |= TDBF_WINOLDAP;
- pTask->hInstance = pModule->self;
- pTask->hPrevInstance = 0;
- /* NOTE: for 16-bit tasks, the instance handles are updated later on
- in NE_InitProcess */
-
pTask->version = pModule->expected_version;
pTask->hModule = pModule->self;
pTask->hParent = GetCurrentTask();