/* TMTMod.c
Provides Win32 API veneers for TMT module
by N. Douglas
Started: 30-11-1996
Last updated: 30-11-1996 version 0.10

Note that parts of this API is (C) to Microsoft Corp.
*/

#include "TMTMod.h"
#include "kernel.h"

#define _Initialise 0xC0040
#define _Closedown _Initialise+4
#define _CreateThread _Closedown+5
#define _ExitThread _CreateThread+0
#define _TerminateThread _ExitThread+0

extern HANDLE CreateThread(
    LPSECURITY_ATTRIBUTES  lpsa,
    DWORD  cbStack,
    LPTHREAD_START_ROUTINE  lpStartAddr,
    LPVOID  lpvThreadParm,
    DWORD  fdwCreate,
    LPDWORD  lpIDThread
   )
{
  _kernel_swi_regs r;

  r.r[0]=(int) &lpsa;
  r.r[1]=cbStack;
  r.r[2]=(int) lpStartAddr;
  r.r[3]=lpvThreadParm;
  r.r[4]=fdwCreate;
  _kernel_swi(_CreateThread, &r, &r);
  * (int *) lpIDThread=r.r[1];
  return((HANDLE) r.r[1]);
}

extern void ExitThread(DWORD dwExitCode)
{
  _kernel_swi_regs r;

  r.r[0]=dwExitCode;
  _kernel_swi(_ExitThread, &r, &r);
  /* Never returns */
}

extern BOOL TerminateThread(HANDLE hThread, DWORD dwExitCode)
{
  _kernel_swi_regs r;

  r.r[0]=hThread;
  r.r[1]=dwExitCode;
  _kernel_swi(_TerminateThread, &r, &r);
  return(TRUE);
}
