Implemented TerminateApp needed for DBase 5.0.
Made FatalAppExit16 honor the SEM_NOGPFAULTERRORBOX error_mode flag.
diff --git a/loader/task.c b/loader/task.c
index 7491088..f8a9852 100644
--- a/loader/task.c
+++ b/loader/task.c
@@ -1586,6 +1586,57 @@
}
+/**************************************************************************
+ * FatalAppExit16 (KERNEL.137)
+ */
+void WINAPI FatalAppExit16( UINT16 action, LPCSTR str )
+{
+ TDB *pTask = (TDB *)GlobalLock16( GetCurrentTask() );
+
+ if (!pTask || !(pTask->error_mode & SEM_NOGPFAULTERRORBOX))
+ {
+ if (Callout.MessageBoxA)
+ Callout.MessageBoxA( 0, str, NULL, MB_SYSTEMMODAL | MB_OK );
+ else
+ ERR( "%s\n", debugstr_a(str) );
+ }
+ ExitThread(0xff);
+}
+
+
+/***********************************************************************
+ * TerminateApp16 (TOOLHELP.77)
+ *
+ * See "Undocumented Windows".
+ */
+void WINAPI TerminateApp16(HTASK16 hTask, WORD wFlags)
+{
+ if (hTask && hTask != GetCurrentTask())
+ {
+ FIXME("cannot terminate task %x\n", hTask);
+ return;
+ }
+
+ if (wFlags & NO_UAE_BOX)
+ {
+ UINT16 old_mode;
+ old_mode = SetErrorMode16(0);
+ SetErrorMode16(old_mode|SEM_NOGPFAULTERRORBOX);
+ }
+ FatalAppExit16( 0, NULL );
+
+ /* hmm, we're still alive ?? */
+
+ /* check undocumented flag */
+ if (!(wFlags & 0x8000))
+ TASK_CallTaskSignalProc( USIG16_TERMINATION, hTask );
+
+ /* UndocWin says to call int 0x21/0x4c exit=0xff here,
+ but let's just call ExitThread */
+ ExitThread(0xff);
+}
+
+
/***********************************************************************
* GetAppCompatFlags16 (KERNEL.354)
*/