From cf6f12f3cfc2a3ab996daef99a95321971363b9e Mon Sep 17 00:00:00 2001 From: Ove Kaaven Date: Wed, 7 Nov 2001 20:15:39 +0000 Subject: [PATCH] Added RunInThread callout to winedos. --- dlls/winedos/module.c | 5 +++++ dlls/winedos/winedos.spec | 1 + include/callback.h | 2 ++ include/dosexe.h | 2 ++ msdos/dpmi.c | 24 +++++++++++++----------- 5 files changed, 23 insertions(+), 11 deletions(-) diff --git a/dlls/winedos/module.c b/dlls/winedos/module.c index 47a5f439775..1a03229e624 100644 --- a/dlls/winedos/module.c +++ b/dlls/winedos/module.c @@ -421,6 +421,11 @@ LPDOSTASK WINAPI MZ_AllocDPMITask( void ) return lpDosTask; } +void WINAPI MZ_RunInThread( PAPCFUNC proc, ULONG_PTR arg ) +{ + proc(arg); +} + static void MZ_InitTimer( int ver ) { if (ver<1) { diff --git a/dlls/winedos/winedos.spec b/dlls/winedos/winedos.spec index 651c54f7491..8717c66222d 100644 --- a/dlls/winedos/winedos.spec +++ b/dlls/winedos/winedos.spec @@ -12,6 +12,7 @@ debug_channels (int module relay) @ stdcall LoadDosExe(str long) MZ_LoadImage @ stdcall Exec(ptr str long ptr) MZ_Exec @ stdcall Exit(ptr long long) MZ_Exit +@ stdcall RunInThread(ptr long) MZ_RunInThread @ stdcall Enter(ptr) DOSVM_Enter @ stdcall Wait(long long) DOSVM_Wait diff --git a/include/callback.h b/include/callback.h index af97d64dbe4..a93dc4ddd69 100644 --- a/include/callback.h +++ b/include/callback.h @@ -37,11 +37,13 @@ typedef struct { BOOL WINAPI (*Exec)( CONTEXT86 *context, LPCSTR filename, BYTE func, LPVOID paramblk ); void WINAPI (*Exit)( CONTEXT86 *context, BOOL cs_psp, WORD retval ); int WINAPI (*Enter)( CONTEXT86 *context ); + void WINAPI (*RunInThread)( PAPCFUNC proc, ULONG_PTR arg ); void WINAPI (*Wait)( int read_pipe, HANDLE hObject ); void WINAPI (*QueueEvent)( int irq, int priority, void (*relay)(CONTEXT86*,void*), void *data ); void WINAPI (*OutPIC)( WORD port, BYTE val ); void WINAPI (*SetTimer)( unsigned ticks ); unsigned WINAPI (*GetTimer)( void ); + BYTE WINAPI (*KbdReadScan)( BYTE *ascii ); } DOSVM_TABLE; extern DOSVM_TABLE Dosvm; diff --git a/include/dosexe.h b/include/dosexe.h index 0f25f90ef8c..5e0fefd6d9a 100644 --- a/include/dosexe.h +++ b/include/dosexe.h @@ -37,8 +37,10 @@ extern BOOL WINAPI MZ_Exec( CONTEXT86 *context, LPCSTR filename, BYTE func, LPVO extern void WINAPI MZ_Exit( CONTEXT86 *context, BOOL cs_psp, WORD retval ); extern LPDOSTASK WINAPI MZ_Current( void ); extern LPDOSTASK WINAPI MZ_AllocDPMITask( void ); +extern void WINAPI MZ_RunInThread( PAPCFUNC proc, ULONG_PTR arg ); extern INT WINAPI DOSVM_Enter( CONTEXT86 *context ); extern void WINAPI DOSVM_Wait( INT read_pipe, HANDLE hObject ); +extern DWORD WINAPI DOSVM_Loop( LPVOID lpExtra ); extern void WINAPI DOSVM_QueueEvent( INT irq, INT priority, DOSRELAY relay, LPVOID data ); extern void WINAPI DOSVM_PIC_ioport_out( WORD port, BYTE val ); extern void WINAPI DOSVM_SetTimer( UINT ticks ); diff --git a/msdos/dpmi.c b/msdos/dpmi.c index e40d4ee77c1..00d9c1ba86d 100644 --- a/msdos/dpmi.c +++ b/msdos/dpmi.c @@ -80,17 +80,19 @@ BOOL DPMI_LoadDosSystem(void) ERR("could not load winedos.dll, DOS subsystem unavailable\n"); return FALSE; } - Dosvm.Current = (void *)GetProcAddress(DosModule, "GetCurrent"); - Dosvm.LoadDPMI = (void *)GetProcAddress(DosModule, "LoadDPMI"); - Dosvm.LoadDosExe = (void *)GetProcAddress(DosModule, "LoadDosExe"); - Dosvm.Exec = (void *)GetProcAddress(DosModule, "Exec"); - Dosvm.Exit = (void *)GetProcAddress(DosModule, "Exit"); - Dosvm.Enter = (void *)GetProcAddress(DosModule, "Enter"); - Dosvm.Wait = (void *)GetProcAddress(DosModule, "Wait"); - Dosvm.QueueEvent = (void *)GetProcAddress(DosModule, "QueueEvent"); - Dosvm.OutPIC = (void *)GetProcAddress(DosModule, "OutPIC"); - Dosvm.SetTimer = (void *)GetProcAddress(DosModule, "SetTimer"); - Dosvm.GetTimer = (void *)GetProcAddress(DosModule, "GetTimer"); + Dosvm.Current = (void *)GetProcAddress(DosModule, "GetCurrent"); + Dosvm.LoadDPMI = (void *)GetProcAddress(DosModule, "LoadDPMI"); + Dosvm.LoadDosExe = (void *)GetProcAddress(DosModule, "LoadDosExe"); + Dosvm.Exec = (void *)GetProcAddress(DosModule, "Exec"); + Dosvm.Exit = (void *)GetProcAddress(DosModule, "Exit"); + Dosvm.Enter = (void *)GetProcAddress(DosModule, "Enter"); + Dosvm.RunInThread = (void *)GetProcAddress(DosModule, "RunInThread"); + Dosvm.Wait = (void *)GetProcAddress(DosModule, "Wait"); + Dosvm.QueueEvent = (void *)GetProcAddress(DosModule, "QueueEvent"); + Dosvm.OutPIC = (void *)GetProcAddress(DosModule, "OutPIC"); + Dosvm.SetTimer = (void *)GetProcAddress(DosModule, "SetTimer"); + Dosvm.GetTimer = (void *)GetProcAddress(DosModule, "GetTimer"); + Dosvm.KbdReadScan = (void *)GetProcAddress(DosModule, "KbdReadScan"); return TRUE; } -- 2.11.4.GIT