summaryrefslogtreecommitdiffstats
path: root/loader/wine/winnt.h
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2012-08-12 15:30:21 +0200
committerwm4 <wm4@nowhere>2012-08-16 17:16:33 +0200
commitaebfbbf2bdda8e18beef90c16da97bd335f7d3b0 (patch)
treea7362bf3ef6f2d80a47b2e539a2ea4efe5e2e079 /loader/wine/winnt.h
parentc6b03ffef6250096373c4a81a489dae9fbff9087 (diff)
downloadmpv-aebfbbf2bdda8e18beef90c16da97bd335f7d3b0.tar.bz2
mpv-aebfbbf2bdda8e18beef90c16da97bd335f7d3b0.tar.xz
Remove win32/qt/xanim/real binary codecs loading
Remove the win32 loader - the win32 emulation layer, as well as the code for using DirectShow/DMO/VFW codecs. Remove loading of xanim, QuickTime, and RealMedia codecs. The win32 emulation layer is based on a very old version of wine. Apparently, wine code was copied and hacked until it was somehow able to load a limited collection of binary codecs. It poked around in the code segment of some known binary codecs to disable unsupported win32 API calls to make them work. Example from module.c: for (i=0;i<5;i++) RVA(0x19e842)[i]=0x90; // make_new_region ? for (i=0;i<28;i++) RVA(0x19e86d)[i]=0x90; // call__call_CreateCompatibleDC ? for (i=0;i<5;i++) RVA(0x19e898)[i]=0x90; // jmp_to_call_loadbitmap ? for (i=0;i<9;i++) RVA(0x19e8ac)[i]=0x90; // call__calls_OLE_shit ? for (i=0;i<106;i++) RVA(0x261b10)[i]=0x90; // disable threads Just to show how utterly insane this code is. You wouldn't want even your worst enemy to have to maintain this. In fact, it seems nobody made major changes to this code ever since it was committed. Most formats can be decoded by libavcodecs these days, and the loader couldn't be used on 64 bit platforms anyway. The same is (probably) true for the other binary codecs. General note about how support for win32 codecs could be added back: It's not possible to replace the win32 loader code by using wine as library, because modern wine can not be linked with native Linux programs for certain reasons. It would be possible to to move DirectShow video decoding into a separate process linked with wine, like the CoreAVC-for-Linux patches do. There is also the mplayer-ww fork, which uses the dshownative library to use DirectShow codecs on Windows.
Diffstat (limited to 'loader/wine/winnt.h')
-rw-r--r--loader/wine/winnt.h2663
1 files changed, 0 insertions, 2663 deletions
diff --git a/loader/wine/winnt.h b/loader/wine/winnt.h
deleted file mode 100644
index cb9984a1c4..0000000000
--- a/loader/wine/winnt.h
+++ /dev/null
@@ -1,2663 +0,0 @@
-/*
- * Win32 definitions for Windows NT
- *
- * Copyright 1996 Alexandre Julliard
- */
-
-#ifndef MPLAYER_WINNT_H
-#define MPLAYER_WINNT_H
-
-#include "windef.h"
-
-#ifndef RC_INVOKED
-#include <string.h>
-#endif
-
-#include "pshpack1.h"
-/* Defines */
-
-/* Argument 1 passed to the DllEntryProc. */
-#define DLL_PROCESS_DETACH 0 /* detach process (unload library) */
-#define DLL_PROCESS_ATTACH 1 /* attach process (load library) */
-#define DLL_THREAD_ATTACH 2 /* attach new thread */
-#define DLL_THREAD_DETACH 3 /* detach thread */
-
-
-/* u.x.wProcessorArchitecture (NT) */
-#define PROCESSOR_ARCHITECTURE_INTEL 0
-#define PROCESSOR_ARCHITECTURE_MIPS 1
-#define PROCESSOR_ARCHITECTURE_ALPHA 2
-#define PROCESSOR_ARCHITECTURE_PPC 3
-#define PROCESSOR_ARCHITECTURE_SHX 4
-#define PROCESSOR_ARCHITECTURE_ARM 5
-#define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
-
-/* dwProcessorType */
-#define PROCESSOR_INTEL_386 386
-#define PROCESSOR_INTEL_486 486
-#define PROCESSOR_INTEL_PENTIUM 586
-#define PROCESSOR_INTEL_860 860
-#define PROCESSOR_MIPS_R2000 2000
-#define PROCESSOR_MIPS_R3000 3000
-#define PROCESSOR_MIPS_R4000 4000
-#define PROCESSOR_ALPHA_21064 21064
-#define PROCESSOR_PPC_601 601
-#define PROCESSOR_PPC_603 603
-#define PROCESSOR_PPC_604 604
-#define PROCESSOR_PPC_620 620
-#define PROCESSOR_HITACHI_SH3 10003
-#define PROCESSOR_HITACHI_SH3E 10004
-#define PROCESSOR_HITACHI_SH4 10005
-#define PROCESSOR_MOTOROLA_821 821
-#define PROCESSOR_SHx_SH3 103
-#define PROCESSOR_SHx_SH4 104
-#define PROCESSOR_STRONGARM 2577
-#define PROCESSOR_ARM720 1824 /* 0x720 */
-#define PROCESSOR_ARM820 2080 /* 0x820 */
-#define PROCESSOR_ARM920 2336 /* 0x920 */
-#define PROCESSOR_ARM_7TDMI 70001
-
-#define ANYSIZE_ARRAY 1
-
-#define MINCHAR 0x80
-#define MAXCHAR 0x7f
-#define MINSHORT 0x8000
-#define MAXSHORT 0x7fff
-#define MINLONG 0x80000000
-#define MAXLONG 0x7fffffff
-#define MAXBYTE 0xff
-#define MAXWORD 0xffff
-#define MAXDWORD 0xffffffff
-
-#define FIELD_OFFSET(type, field) \
- ((LONG)(INT)&(((type *)0)->field))
-
-#define CONTAINING_RECORD(address, type, field) \
- ((type *)((PCHAR)(address) - (PCHAR)(&((type *)0)->field)))
-
-/* Types */
-
-/* TCHAR data types definitions for Winelib. */
-/* These types are _not_ defined for the emulator, because they */
-/* depend on the UNICODE macro that only exists in user's code. */
-
-# ifdef UNICODE
-typedef WCHAR TCHAR, *PTCHAR;
-typedef LPWSTR PTSTR, LPTSTR;
-typedef LPCWSTR PCTSTR, LPCTSTR;
-#define TEXT(string) L##string /*probably wrong */
-# else /* UNICODE */
-typedef char TCHAR, *PTCHAR;
-typedef LPSTR PTSTR, LPTSTR;
-typedef LPCSTR PCTSTR, LPCTSTR;
-#define TEXT(string) string
-# endif /* UNICODE */
-
-typedef BYTE BOOLEAN;
-typedef BOOLEAN *PBOOLEAN;
-
-typedef struct LIST_ENTRY {
- struct LIST_ENTRY *Flink;
- struct LIST_ENTRY *Blink;
-} LIST_ENTRY, *PLIST_ENTRY;
-
-typedef struct SINGLE_LIST_ENTRY {
- struct SINGLE_LIST_ENTRY *Next;
-} SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
-
-/* Heap flags */
-
-#define HEAP_NO_SERIALIZE 0x00000001
-#define HEAP_GROWABLE 0x00000002
-#define HEAP_GENERATE_EXCEPTIONS 0x00000004
-#define HEAP_ZERO_MEMORY 0x00000008
-#define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
-#define HEAP_TAIL_CHECKING_ENABLED 0x00000020
-#define HEAP_FREE_CHECKING_ENABLED 0x00000040
-#define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
-#define HEAP_CREATE_ALIGN_16 0x00010000
-#define HEAP_CREATE_ENABLE_TRACING 0x00020000
-#define HEAP_WINE_SEGPTR 0x01000000 /* Not a Win32 flag */
-#define HEAP_WINE_CODESEG 0x02000000 /* Not a Win32 flag */
-#define HEAP_WINE_CODE16SEG 0x04000000 /* Not a Win32 flag */
-#define HEAP_WINE_SHARED 0x08000000 /* Not a Win32 flag */
-
-/* Processor feature flags. */
-#define PF_FLOATING_POINT_PRECISION_ERRATA 0
-#define PF_FLOATING_POINT_EMULATED 1
-#define PF_COMPARE_EXCHANGE_DOUBLE 2
-#define PF_MMX_INSTRUCTIONS_AVAILABLE 3
-#define PF_PPC_MOVEMEM_64BIT_OK 4
-#define PF_ALPHA_BYTE_INSTRUCTIONS 5
-/* based on wine-20010510 -- alex */
-#define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
-#define PF_AMD3D_INSTRUCTIONS_AVAILABLE 7
-#define PF_RDTSC_INSTRUCTION_AVAILABLE 8
-#define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
-
-/* The Win32 register context */
-
-/* CONTEXT is the CPU-dependent context; it should be used */
-/* wherever a platform-specific context is needed (e.g. exception */
-/* handling, Win32 register functions). */
-
-/* CONTEXT86 is the i386-specific context; it should be used */
-/* wherever only a 386 context makes sense (e.g. DOS interrupts, */
-/* Win16 register functions), so that this code can be compiled */
-/* on all platforms. */
-
-#define SIZE_OF_80387_REGISTERS 80
-
-typedef struct FLOATING_SAVE_AREA
-{
- DWORD ControlWord;
- DWORD StatusWord;
- DWORD TagWord;
- DWORD ErrorOffset;
- DWORD ErrorSelector;
- DWORD DataOffset;
- DWORD DataSelector;
- BYTE RegisterArea[SIZE_OF_80387_REGISTERS];
- DWORD Cr0NpxState;
-} FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
-
-typedef struct CONTEXT86
-{
- DWORD ContextFlags;
-
- /* These are selected by CONTEXT_DEBUG_REGISTERS */
- DWORD Dr0;
- DWORD Dr1;
- DWORD Dr2;
- DWORD Dr3;
- DWORD Dr6;
- DWORD Dr7;
-
- /* These are selected by CONTEXT_FLOATING_POINT */
- FLOATING_SAVE_AREA FloatSave;
-
- /* These are selected by CONTEXT_SEGMENTS */
- DWORD SegGs;
- DWORD SegFs;
- DWORD SegEs;
- DWORD SegDs;
-
- /* These are selected by CONTEXT_INTEGER */
- DWORD Edi;
- DWORD Esi;
- DWORD Ebx;
- DWORD Edx;
- DWORD Ecx;
- DWORD Eax;
-
- /* These are selected by CONTEXT_CONTROL */
- DWORD Ebp;
- DWORD Eip;
- DWORD SegCs;
- DWORD EFlags;
- DWORD Esp;
- DWORD SegSs;
-} CONTEXT86;
-
-#define CONTEXT_X86 0x00010000
-#define CONTEXT_i386 CONTEXT_X86
-#define CONTEXT_i486 CONTEXT_X86
-
-#define CONTEXT86_CONTROL (CONTEXT_i386 | 0x0001) /* SS:SP, CS:IP, FLAGS, BP */
-#define CONTEXT86_INTEGER (CONTEXT_i386 | 0x0002) /* AX, BX, CX, DX, SI, DI */
-#define CONTEXT86_SEGMENTS (CONTEXT_i386 | 0x0004) /* DS, ES, FS, GS */
-#define CONTEXT86_FLOATING_POINT (CONTEXT_i386 | 0x0008L) /* 387 state */
-#define CONTEXT86_DEBUG_REGISTERS (CONTEXT_i386 | 0x0010L) /* DB 0-3,6,7 */
-#define CONTEXT86_FULL (CONTEXT86_CONTROL | CONTEXT86_INTEGER | CONTEXT86_SEGMENTS)
-
-/* i386 context definitions */
-#if ARCH_X86_32
-
-#define CONTEXT_CONTROL CONTEXT86_CONTROL
-#define CONTEXT_INTEGER CONTEXT86_INTEGER
-#define CONTEXT_SEGMENTS CONTEXT86_SEGMENTS
-#define CONTEXT_FLOATING_POINT CONTEXT86_FLOATING_POINT
-#define CONTEXT_DEBUG_REGISTERS CONTEXT86_DEBUG_REGISTERS
-#define CONTEXT_FULL CONTEXT86_FULL
-
-typedef CONTEXT86 CONTEXT;
-
-#endif /* ARCH_X86_32 */
-
-/* Alpha context definitions */
-#if defined(_ALPHA_) || defined(__alpha__)
-
-#define CONTEXT_ALPHA 0x00020000
-
-#define CONTEXT_CONTROL (CONTEXT_ALPHA | 0x00000001L)
-#define CONTEXT_FLOATING_POINT (CONTEXT_ALPHA | 0x00000002L)
-#define CONTEXT_INTEGER (CONTEXT_ALPHA | 0x00000004L)
-#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
-
-typedef struct CONTEXT
-{
- /* selected by CONTEXT_FLOATING_POINT */
- ULONGLONG FltF0;
- ULONGLONG FltF1;
- ULONGLONG FltF2;
- ULONGLONG FltF3;
- ULONGLONG FltF4;
- ULONGLONG FltF5;
- ULONGLONG FltF6;
- ULONGLONG FltF7;
- ULONGLONG FltF8;
- ULONGLONG FltF9;
- ULONGLONG FltF10;
- ULONGLONG FltF11;
- ULONGLONG FltF12;
- ULONGLONG FltF13;
- ULONGLONG FltF14;
- ULONGLONG FltF15;
- ULONGLONG FltF16;
- ULONGLONG FltF17;
- ULONGLONG FltF18;
- ULONGLONG FltF19;
- ULONGLONG FltF20;
- ULONGLONG FltF21;
- ULONGLONG FltF22;
- ULONGLONG FltF23;
- ULONGLONG FltF24;
- ULONGLONG FltF25;
- ULONGLONG FltF26;
- ULONGLONG FltF27;
- ULONGLONG FltF28;
- ULONGLONG FltF29;
- ULONGLONG FltF30;
- ULONGLONG FltF31;
-
- /* selected by CONTEXT_INTEGER */
- ULONGLONG IntV0;
- ULONGLONG IntT0;
- ULONGLONG IntT1;
- ULONGLONG IntT2;
- ULONGLONG IntT3;
- ULONGLONG IntT4;
- ULONGLONG IntT5;
- ULONGLONG IntT6;
- ULONGLONG IntT7;
- ULONGLONG IntS0;
- ULONGLONG IntS1;
- ULONGLONG IntS2;
- ULONGLONG IntS3;
- ULONGLONG IntS4;
- ULONGLONG IntS5;
- ULONGLONG IntFp;
- ULONGLONG IntA0;
- ULONGLONG IntA1;
- ULONGLONG IntA2;
- ULONGLONG IntA3;
- ULONGLONG IntA4;
- ULONGLONG IntA5;
- ULONGLONG IntT8;
- ULONGLONG IntT9;
- ULONGLONG IntT10;
- ULONGLONG IntT11;
- ULONGLONG IntRa;
- ULONGLONG IntT12;
- ULONGLONG IntAt;
- ULONGLONG IntGp;
- ULONGLONG IntSp;
- ULONGLONG IntZero;
-
- /* selected by CONTEXT_FLOATING_POINT */
- ULONGLONG Fpcr;
- ULONGLONG SoftFpcr;
-
- /* selected by CONTEXT_CONTROL */
- ULONGLONG Fir;
- DWORD Psr;
- DWORD ContextFlags;
- DWORD Fill[4];
-} CONTEXT;
-
-#define QUAD_PSR_OFFSET HighSoftFpcr
-#define QUAD_FLAGS_OFFSET HighFir
-
-#endif /* _ALPHA_ */
-
-/* Mips context definitions */
-#ifdef _MIPS_
-
-#define CONTEXT_R4000 0x00010000
-
-#define CONTEXT_CONTROL (CONTEXT_R4000 | 0x00000001)
-#define CONTEXT_FLOATING_POINT (CONTEXT_R4000 | 0x00000002)
-#define CONTEXT_INTEGER (CONTEXT_R4000 | 0x00000004)
-
-#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
-
-typedef struct CONTEXT
-{
- DWORD Argument[4];
- /* These are selected by CONTEXT_FLOATING_POINT */
- DWORD FltF0;
- DWORD FltF1;
- DWORD FltF2;
- DWORD FltF3;
- DWORD FltF4;
- DWORD FltF5;
- DWORD FltF6;
- DWORD FltF7;
- DWORD FltF8;
- DWORD FltF9;
- DWORD FltF10;
- DWORD FltF11;
- DWORD FltF12;
- DWORD FltF13;
- DWORD FltF14;
- DWORD FltF15;
- DWORD FltF16;
- DWORD FltF17;
- DWORD FltF18;
- DWORD FltF19;
- DWORD FltF20;
- DWORD FltF21;
- DWORD FltF22;
- DWORD FltF23;
- DWORD FltF24;
- DWORD FltF25;
- DWORD FltF26;
- DWORD FltF27;
- DWORD FltF28;
- DWORD FltF29;
- DWORD FltF30;
- DWORD FltF31;
-
- /* These are selected by CONTEXT_INTEGER */
- DWORD IntZero;
- DWORD IntAt;
- DWORD IntV0;
- DWORD IntV1;
- DWORD IntA0;
- DWORD IntA1;
- DWORD IntA2;
- DWORD IntA3;
- DWORD IntT0;
- DWORD IntT1;
- DWORD IntT2;
- DWORD IntT3;
- DWORD IntT4;
- DWORD IntT5;
- DWORD IntT6;
- DWORD IntT7;
- DWORD IntS0;
- DWORD IntS1;
- DWORD IntS2;
- DWORD IntS3;
- DWORD IntS4;
- DWORD IntS5;
- DWORD IntS6;
- DWORD IntS7;
- DWORD IntT8;
- DWORD IntT9;
- DWORD IntK0;
- DWORD IntK1;
- DWORD IntGp;
- DWORD IntSp;
- DWORD IntS8;
- DWORD IntRa;
- DWORD IntLo;
- DWORD IntHi;
-
- /* These are selected by CONTEXT_FLOATING_POINT */
- DWORD Fsr;
-
- /* These are selected by CONTEXT_CONTROL */
- DWORD Fir;
- DWORD Psr;
-
- DWORD ContextFlags;
- DWORD Fill[2];
-} CONTEXT;
-
-#endif /* _MIPS_ */
-
-/* PowerPC context definitions */
-#ifdef __PPC__
-
-#define CONTEXT_CONTROL 0x0001
-#define CONTEXT_FLOATING_POINT 0x0002
-#define CONTEXT_INTEGER 0x0004
-#define CONTEXT_DEBUG_REGISTERS 0x0008
-#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
-
-typedef struct
-{
- /* These are selected by CONTEXT_FLOATING_POINT */
- double Fpr0;
- double Fpr1;
- double Fpr2;
- double Fpr3;
- double Fpr4;
- double Fpr5;
- double Fpr6;
- double Fpr7;
- double Fpr8;
- double Fpr9;
- double Fpr10;
- double Fpr11;
- double Fpr12;
- double Fpr13;
- double Fpr14;
- double Fpr15;
- double Fpr16;
- double Fpr17;
- double Fpr18;
- double Fpr19;
- double Fpr20;
- double Fpr21;
- double Fpr22;
- double Fpr23;
- double Fpr24;
- double Fpr25;
- double Fpr26;
- double Fpr27;
- double Fpr28;
- double Fpr29;
- double Fpr30;
- double Fpr31;
- double Fpscr;
-
- /* These are selected by CONTEXT_INTEGER */
- DWORD Gpr0;
- DWORD Gpr1;
- DWORD Gpr2;
- DWORD Gpr3;
- DWORD Gpr4;
- DWORD Gpr5;
- DWORD Gpr6;
- DWORD Gpr7;
- DWORD Gpr8;
- DWORD Gpr9;
- DWORD Gpr10;
- DWORD Gpr11;
- DWORD Gpr12;
- DWORD Gpr13;
- DWORD Gpr14;
- DWORD Gpr15;
- DWORD Gpr16;
- DWORD Gpr17;
- DWORD Gpr18;
- DWORD Gpr19;
- DWORD Gpr20;
- DWORD Gpr21;
- DWORD Gpr22;
- DWORD Gpr23;
- DWORD Gpr24;
- DWORD Gpr25;
- DWORD Gpr26;
- DWORD Gpr27;
- DWORD Gpr28;
- DWORD Gpr29;
- DWORD Gpr30;
- DWORD Gpr31;
-
- DWORD Cr;
- DWORD Xer;
-
- /* These are selected by CONTEXT_CONTROL */
- DWORD Msr;
- DWORD Iar;
- DWORD Lr;
- DWORD Ctr;
-
- DWORD ContextFlags;
- DWORD Fill[3];
-
- /* These are selected by CONTEXT_DEBUG_REGISTERS */
- DWORD Dr0;
- DWORD Dr1;
- DWORD Dr2;
- DWORD Dr3;
- DWORD Dr4;
- DWORD Dr5;
- DWORD Dr6;
- DWORD Dr7;
-} CONTEXT;
-
-typedef struct STACK_FRAME_HEADER
-{
- DWORD BackChain;
- DWORD GlueSaved1;
- DWORD GlueSaved2;
- DWORD Reserved1;
- DWORD Spare1;
- DWORD Spare2;
-
- DWORD Parameter0;
- DWORD Parameter1;
- DWORD Parameter2;
- DWORD Parameter3;
- DWORD Parameter4;
- DWORD Parameter5;
- DWORD Parameter6;
- DWORD Parameter7;
-} STACK_FRAME_HEADER,*PSTACK_FRAME_HEADER;
-
-#endif /* __PPC__ */
-
-#ifdef __sparc__
-
-/*
- * FIXME:
- *
- * There is no official CONTEXT structure defined for the SPARC
- * architecture, so I just made one up.
- *
- * This structure is valid only for 32-bit SPARC architectures,
- * not for 64-bit SPARC.
- *
- * Note that this structure contains only the 'top-level' registers;
- * the rest of the register window chain is not visible.
- *
- * The layout follows the Solaris 'prgregset_t' structure.
- *
- */
-
-#define CONTEXT_SPARC 0x10000000
-
-#define CONTEXT_CONTROL (CONTEXT_SPARC | 0x00000001)
-#define CONTEXT_FLOATING_POINT (CONTEXT_SPARC | 0x00000002)
-#define CONTEXT_INTEGER (CONTEXT_SPARC | 0x00000004)
-
-#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
-
-typedef struct CONTEXT
-{
- DWORD ContextFlags;
-
- /* These are selected by CONTEXT_INTEGER */
- DWORD g0;
- DWORD g1;
- DWORD g2;
- DWORD g3;
- DWORD g4;
- DWORD g5;
- DWORD g6;
- DWORD g7;
- DWORD o0;
- DWORD o1;
- DWORD o2;
- DWORD o3;
- DWORD o4;
- DWORD o5;
- DWORD o6;
- DWORD o7;
- DWORD l0;
- DWORD l1;
- DWORD l2;
- DWORD l3;
- DWORD l4;
- DWORD l5;
- DWORD l6;
- DWORD l7;
- DWORD i0;
- DWORD i1;
- DWORD i2;
- DWORD i3;
- DWORD i4;
- DWORD i5;
- DWORD i6;
- DWORD i7;
-
- /* These are selected by CONTEXT_CONTROL */
- DWORD psr;
- DWORD pc;
- DWORD npc;
- DWORD y;
- DWORD wim;
- DWORD tbr;
-
- /* FIXME: floating point registers missing */
-
-} CONTEXT;
-
-#endif /* __sparc__ */
-
-#if !defined(CONTEXT_FULL) && !defined(RC_INVOKED)
-#warning You need to define a CONTEXT for your CPU
-typedef void CONTEXT;
-#endif
-
-typedef CONTEXT *PCONTEXT;
-typedef HANDLE *PHANDLE;
-
-/* Macros for easier access to i386 context registers */
-
-#define EAX_reg(context) ((context)->Eax)
-#define EBX_reg(context) ((context)->Ebx)
-#define ECX_reg(context) ((context)->Ecx)
-#define EDX_reg(context) ((context)->Edx)
-#define ESI_reg(context) ((context)->Esi)
-#define EDI_reg(context) ((context)->Edi)
-#define EBP_reg(context) ((context)->Ebp)
-
-#define CS_reg(context) ((context)->SegCs)
-#define DS_reg(context) ((context)->SegDs)
-#define ES_reg(context) ((context)->SegEs)
-#define FS_reg(context) ((context)->SegFs)
-#define GS_reg(context) ((context)->SegGs)
-#define SS_reg(context) ((context)->SegSs)
-
-#define EFL_reg(context) ((context)->EFlags)
-#define EIP_reg(context) ((context)->Eip)
-#define ESP_reg(context) ((context)->Esp)
-
-#define AX_reg(context) (*(WORD*)&EAX_reg(context))
-#define BX_reg(context) (*(WORD*)&EBX_reg(context))
-#define CX_reg(context) (*(WORD*)&ECX_reg(context))
-#define DX_reg(context) (*(WORD*)&EDX_reg(context))
-#define SI_reg(context) (*(WORD*)&ESI_reg(context))
-#define DI_reg(context) (*(WORD*)&EDI_reg(context))
-#define BP_reg(context) (*(WORD*)&EBP_reg(context))
-
-#define AL_reg(context) (*(BYTE*)&EAX_reg(context))
-#define AH_reg(context) (*((BYTE*)&EAX_reg(context)+1))
-#define BL_reg(context) (*(BYTE*)&EBX_reg(context))
-#define BH_reg(context) (*((BYTE*)&EBX_reg(context)+1))
-#define CL_reg(context) (*(BYTE*)&ECX_reg(context))
-#define CH_reg(context) (*((BYTE*)&ECX_reg(context)+1))
-#define DL_reg(context) (*(BYTE*)&EDX_reg(context))
-#define DH_reg(context) (*((BYTE*)&EDX_reg(context)+1))
-
-#define SET_CFLAG(context) (EFL_reg(context) |= 0x0001)
-#define RESET_CFLAG(context) (EFL_reg(context) &= ~0x0001)
-#define SET_ZFLAG(context) (EFL_reg(context) |= 0x0040)
-#define RESET_ZFLAG(context) (EFL_reg(context) &= ~0x0040)
-
-#define ISV86(context) (EFL_reg(context) & 0x00020000)
-#define V86BASE(context) ((context)->Dr7) /* ugly */
-
-
-/* Macros to retrieve the current context */
-
-#if ARCH_X86_32
-
-#ifdef NEED_UNDERSCORE_PREFIX
-# define ASM_NAME(name) "_" name
-#else
-# define ASM_NAME(name) name
-#endif
-
-#ifdef __GNUC__
-# define ASM_GLOBAL_FUNC(name,code) \
- __asm__( ".align 4\n\t" \
- ".globl " ASM_NAME(#name) "\n\t" \
- ".type " ASM_NAME(#name) ",@function\n" \
- ASM_NAME(#name) ":\n\t" \
- code );
-#else /* __GNUC__ */
-# define ASM_GLOBAL_FUNC(name,code) \
- void asm_dummy_##name(void) { \
- __asm__( ".align 4\n\t" \
- ".globl " ASM_NAME(#name) "\n\t" \
- ".type " ASM_NAME(#name) ",@function\n" \
- ASM_NAME(#name) ":\n\t" \
- code ); \
- }
-#endif /* __GNUC__ */
-
-#define DEFINE_REGS_ENTRYPOINT( name, fn, args ) \
- ASM_GLOBAL_FUNC( name, \
- "call " ASM_NAME("CALL32_Regs") "\n\t" \
- ".long " ASM_NAME(#fn) "\n\t" \
- ".byte " #args ", " #args )
-#define DEFINE_REGS_ENTRYPOINT_0( name, fn ) \
- DEFINE_REGS_ENTRYPOINT( name, fn, 0 )
-#define DEFINE_REGS_ENTRYPOINT_1( name, fn, t1 ) \
- DEFINE_REGS_ENTRYPOINT( name, fn, 4 )
-#define DEFINE_REGS_ENTRYPOINT_2( name, fn, t1, t2 ) \
- DEFINE_REGS_ENTRYPOINT( name, fn, 8 )
-#define DEFINE_REGS_ENTRYPOINT_3( name, fn, t1, t2, t3 ) \
- DEFINE_REGS_ENTRYPOINT( name, fn, 12 )
-#define DEFINE_REGS_ENTRYPOINT_4( name, fn, t1, t2, t3, t4 ) \
- DEFINE_REGS_ENTRYPOINT( name, fn, 16 )
-
-#endif /* ARCH_X86_32 */
-
-#ifdef __sparc__
-/* FIXME: use getcontext() to retrieve full context */
-#define GET_CONTEXT \
- CONTEXT context; \
- do { memset(&context, 0, sizeof(CONTEXT)); \
- context.ContextFlags = CONTEXT_CONTROL; \
- context.pc = (DWORD)__builtin_return_address(0); \
- } while (0)
-
-#define DEFINE_REGS_ENTRYPOINT_0( name, fn ) \
- void WINAPI name ( void ) \
- { GET_CONTEXT; fn( &context ); }
-#define DEFINE_REGS_ENTRYPOINT_1( name, fn, t1 ) \
- void WINAPI name ( t1 a1 ) \
- { GET_CONTEXT; fn( a1, &context ); }
-#define DEFINE_REGS_ENTRYPOINT_2( name, fn, t1, t2 ) \
- void WINAPI name ( t1 a1, t2 a2 ) \
- { GET_CONTEXT; fn( a1, a2, &context ); }
-#define DEFINE_REGS_ENTRYPOINT_3( name, fn, t1, t2, t3 ) \
- void WINAPI name ( t1 a1, t2 a2, t3 a3 ) \
- { GET_CONTEXT; fn( a1, a2, a3, &context ); }
-#define DEFINE_REGS_ENTRYPOINT_4( name, fn, t1, t2, t3, t4 ) \
- void WINAPI name ( t1 a1, t2 a2, t3 a3, t4 a4 ) \
- { GET_CONTEXT; fn( a1, a2, a3, a4, &context ); }
-
-#endif /* __sparc__ */
-
-#ifndef DEFINE_REGS_ENTRYPOINT_0
-#warning You need to define DEFINE_REGS_ENTRYPOINT macros for your CPU
-#endif
-
-#if ARCH_X86_32
-# define GET_IP(context) ((LPVOID)(context)->Eip)
-#endif
-#ifdef __sparc__
-# define GET_IP(context) ((LPVOID)(context)->pc)
-#endif
-
-#if !defined(GET_IP) && !defined(RC_INVOKED)
-#warning You must define GET_IP for this CPU
-#endif
-
-/*
- * Exception codes
- */
-
-#define STATUS_SUCCESS 0x00000000
-#define STATUS_WAIT_0 0x00000000
-#define STATUS_ABANDONED_WAIT_0 0x00000080
-#define STATUS_USER_APC 0x000000C0
-#define STATUS_TIMEOUT 0x00000102
-#define STATUS_PENDING 0x00000103
-
-#define STATUS_GUARD_PAGE_VIOLATION 0x80000001
-#define STATUS_DATATYPE_MISALIGNMENT 0x80000002
-#define STATUS_BREAKPOINT 0x80000003
-#define STATUS_SINGLE_STEP 0x80000004
-#define STATUS_BUFFER_OVERFLOW 0x80000005
-#define STATUS_NO_MORE_FILES 0x80000006
-#define STATUS_WAKE_SYSTEM_DEBUGGER 0x80000007
-
-#define STATUS_HANDLES_CLOSED 0x8000000A
-#define STATUS_NO_INHERITANCE 0x8000000B
-#define STATUS_GUID_SUBSTITUTION_MADE 0x8000000C
-#define STATUS_PARTIAL_COPY 0x8000000D
-#define STATUS_DEVICE_PAPER_EMPTY 0x8000000E
-#define STATUS_DEVICE_POWERED_OFF 0x8000000F
-#define STATUS_DEVICE_OFF_LINE 0x80000010
-#define STATUS_DEVICE_BUSY 0x80000011
-#define STATUS_NO_MORE_EAS 0x80000012
-#define STATUS_INVALID_EA_NAME 0x80000013
-#define STATUS_EA_LIST_INCONSISTENT 0x80000014
-#define STATUS_INVALID_EA_FLAG 0x80000015
-#define STATUS_VERIFY_REQUIRED 0x80000016
-#define STATUS_EXTRANEOUS_INFORMATION 0x80000017
-#define STATUS_RXACT_COMMIT_NECESSARY 0x80000018
-#define STATUS_NO_MORE_ENTRIES 0x8000001A
-#define STATUS_FILEMARK_DETECTED 0x8000001B
-#define STATUS_MEDIA_CHANGED 0x8000001C
-#define STATUS_BUS_RESET 0x8000001D
-#define STATUS_END_OF_MEDIA 0x8000001E
-#define STATUS_BEGINNING_OF_MEDIA 0x8000001F
-#define STATUS_MEDIA_CHECK 0x80000020
-#define STATUS_SETMARK_DETECTED 0x80000021
-#define STATUS_NO_DATA_DETECTED 0x80000022
-#define STATUS_REDIRECTOR_HAS_OPEN_HANDLES 0x80000023
-#define STATUS_SERVER_HAS_OPEN_HANDLES 0x80000024
-#define STATUS_ALREADY_DISCONNECTED 0x80000025
-#define STATUS_LONGJUMP 0x80000026
-
-#define STATUS_UNSUCCESSFUL 0xC0000001
-#define STATUS_NOT_IMPLEMENTED 0xC0000002
-#define STATUS_INVALID_INFO_CLASS 0xC0000003
-#define STATUS_INFO_LENGTH_MISMATCH 0xC0000004
-#define STATUS_ACCESS_VIOLATION 0xC0000005
-#define STATUS_IN_PAGE_ERROR 0xC0000006
-#define STATUS_PAGEFILE_QUOTA 0xC0000007
-#define STATUS_INVALID_HANDLE 0xC0000008
-#define STATUS_BAD_INITIAL_STACK 0xC0000009
-#define STATUS_BAD_INITIAL_PC 0xC000000A
-#define STATUS_INVALID_CID 0xC000000B
-#define STATUS_TIMER_NOT_CANCELED 0xC000000C
-#define STATUS_INVALID_PARAMETER 0xC000000D
-#define STATUS_NO_SUCH_DEVICE 0xC000000E
-#define STATUS_NO_SUCH_FILE 0xC000000F
-#define STATUS_INVALID_DEVICE_REQUEST 0xC0000010
-#define STATUS_END_OF_FILE 0xC0000011
-#define STATUS_WRONG_VOLUME 0xC0000012
-#define STATUS_NO_MEDIA_IN_DEVICE 0xC0000013
-#define STATUS_UNRECOGNIZED_MEDIA 0xC0000014
-#define STATUS_NONEXISTENT_SECTOR 0xC0000015
-#define STATUS_MORE_PROCESSING_REQUIRED 0xC0000016
-#define STATUS_NO_MEMORY 0xC0000017
-#define STATUS_CONFLICTING_ADDRESSES 0xC0000018
-#define STATUS_NOT_MAPPED_VIEW 0xC0000019
-#define STATUS_UNABLE_TO_FREE_VM 0xC000001A
-#define STATUS_UNABLE_TO_DELETE_SECTION 0xC000001B
-#define STATUS_INVALID_SYSTEM_SERVICE 0xC000001C
-#define STATUS_ILLEGAL_INSTRUCTION 0xC000001D
-#define STATUS_INVALID_LOCK_SEQUENCE 0xC000001E
-#define STATUS_INVALID_VIEW_SIZE 0xC000001F
-#define STATUS_INVALID_FILE_FOR_SECTION 0xC0000020
-#define STATUS_ALREADY_COMMITTED 0xC0000021
-#define STATUS_ACCESS_DENIED 0xC0000022
-#define STATUS_BUFFER_TOO_SMALL 0xC0000023
-#define STATUS_OBJECT_TYPE_MISMATCH 0xC0000024
-#define STATUS_NONCONTINUABLE_EXCEPTION 0xC0000025
-#define STATUS_INVALID_DISPOSITION 0xC0000026
-#define STATUS_UNWIND 0xC0000027
-#define STATUS_BAD_STACK 0xC0000028
-#define STATUS_INVALID_UNWIND_TARGET 0xC0000029
-#define STATUS_NOT_LOCKED 0xC000002A
-#define STATUS_PARITY_ERROR 0xC000002B
-#define STATUS_UNABLE_TO_DECOMMIT_VM 0xC000002C
-#define STATUS_NOT_COMMITTED 0xC000002D
-#define STATUS_INVALID_PORT_ATTRIBUTES 0xC000002E
-#define STATUS_PORT_MESSAGE_TOO_LONG 0xC000002F
-#define STATUS_INVALID_PARAMETER_MIX 0xC0000030
-#define STATUS_INVALID_QUOTA_LOWER 0xC0000031
-#define STATUS_DISK_CORRUPT_ERROR 0xC0000032
-#define STATUS_OBJECT_NAME_INVALID 0xC0000033
-#define STATUS_OBJECT_NAME_NOT_FOUND 0xC0000034
-#define STATUS_OBJECT_NAME_COLLISION 0xC0000035
-#define STATUS_PORT_DISCONNECTED 0xC0000037
-#define STATUS_DEVICE_ALREADY_ATTACHED 0xC0000038
-#define STATUS_OBJECT_PATH_INVALID 0xC0000039
-#define STATUS_OBJECT_PATH_NOT_FOUND 0xC000003A
-#define STATUS_PATH_SYNTAX_BAD 0xC000003B
-#define STATUS_DATA_OVERRUN 0xC000003C
-#define STATUS_DATA_LATE_ERROR 0xC000003D
-#define STATUS_DATA_ERROR 0xC000003E
-#define STATUS_CRC_ERROR 0xC000003F
-#define STATUS_SECTION_TOO_BIG 0xC0000040
-#define STATUS_PORT_CONNECTION_REFUSED 0xC0000041
-#define STATUS_INVALID_PORT_HANDLE 0xC0000042
-#define STATUS_SHARING_VIOLATION 0xC0000043
-#define STATUS_QUOTA_EXCEEDED 0xC0000044
-#define STATUS_INVALID_PAGE_PROTECTION 0xC0000045
-#define STATUS_MUTANT_NOT_OWNED 0xC0000046
-#define STATUS_SEMAPHORE_LIMIT_EXCEEDED 0xC0000047
-#define STATUS_PORT_ALREADY_SET 0xC0000048
-#define STATUS_SUSPEND_COUNT_EXCEEDED 0xC000004A
-#define STATUS_LOCK_NOT_GRANTED 0xC0000054 /* FIXME: not sure */
-#define STATUS_FILE_LOCK_CONFLICT 0xC0000055 /* FIXME: not sure */
-#define STATUS_UNKNOWN_REVISION 0xC0000058
-#define STATUS_INVALID_SECURITY_DESCR 0xC0000079
-#define STATUS_DISK_FULL 0xC000007F
-#define STATUS_SECTION_NOT_EXTENDED 0xC0000087
-#define STATUS_ARRAY_BOUNDS_EXCEEDED 0xC000008C
-#define STATUS_FLOAT_DENORMAL_OPERAND 0xC000008D
-#define STATUS_FLOAT_DIVIDE_BY_ZERO 0xC000008E
-#define STATUS_FLOAT_INEXACT_RESULT 0xC000008F
-#define STATUS_FLOAT_INVALID_OPERATION 0xC0000090
-#define STATUS_FLOAT_OVERFLOW 0xC0000091
-#define STATUS_FLOAT_STACK_CHECK 0xC0000092
-#define STATUS_FLOAT_UNDERFLOW 0xC0000093
-#define STATUS_INTEGER_DIVIDE_BY_ZERO 0xC0000094
-#define STATUS_INTEGER_OVERFLOW 0xC0000095
-#define STATUS_PRIVILEGED_INSTRUCTION 0xC0000096
-#define STATUS_MEDIA_WRITE_PROTECTED 0XC00000A2
-#define STATUS_INVALID_PARAMETER_2 0xC00000F0
-#define STATUS_STACK_OVERFLOW 0xC00000FD
-#define STATUS_DIRECTORY_NOT_EMPTY 0xC0000101
-#define STATUS_TOO_MANY_OPENED_FILES 0xC000011F
-#define STATUS_CONTROL_C_EXIT 0xC000013A
-#define STATUS_PIPE_BROKEN 0xC000014B
-#define STATUS_NOT_REGISTRY_FILE 0xC000015C
-#define STATUS_PARTITION_FAILURE 0xC0000172
-#define STATUS_INVALID_BLOCK_LENGTH 0xC0000173
-#define STATUS_DEVICE_NOT_PARTITIONED 0xC0000174
-#define STATUS_UNABLE_TO_LOCK_MEDIA 0xC0000175
-#define STATUS_UNABLE_TO_UNLOAD_MEDIA 0xC0000176
-#define STATUS_EOM_OVERFLOW 0xC0000177
-#define STATUS_NO_MEDIA 0xC0000178
-#define STATUS_NO_SUCH_MEMBER 0xC000017A
-#define STATUS_INVALID_MEMBER 0xC000017B
-#define STATUS_KEY_DELETED 0xC000017C
-#define STATUS_NO_LOG_SPACE 0xC000017D
-#define STATUS_TOO_MANY_SIDS 0xC000017E
-#define STATUS_LM_CROSS_ENCRYPTION_REQUIRED 0xC000017F
-#define STATUS_KEY_HAS_CHILDREN 0xC0000180
-#define STATUS_CHILD_MUST_BE_VOLATILE 0xC0000181
-#define STATUS_DEVICE_CONFIGURATION_ERROR0xC0000182
-#define STATUS_DRIVER_INTERNAL_ERROR 0xC0000183
-#define STATUS_INVALID_DEVICE_STATE 0xC0000184
-#define STATUS_IO_DEVICE_ERROR 0xC0000185
-#define STATUS_DEVICE_PROTOCOL_ERROR 0xC0000186
-#define STATUS_BACKUP_CONTROLLER 0xC0000187
-#define STATUS_LOG_FILE_FULL 0xC0000188
-#define STATUS_TOO_LATE 0xC0000189
-#define STATUS_NO_TRUST_LSA_SECRET 0xC000018A
-#define STATUS_NO_TRUST_SAM_ACCOUNT 0xC000018B
-#define STATUS_TRUSTED_DOMAIN_FAILURE 0xC000018C
-#define STATUS_TRUSTED_RELATIONSHIP_FAILURE 0xC000018D
-#define STATUS_EVENTLOG_FILE_CORRUPT 0xC000018E
-#define STATUS_EVENTLOG_CANT_START 0xC000018F
-#define STATUS_TRUST_FAILURE 0xC0000190
-#define STATUS_MUTANT_LIMIT_EXCEEDED 0xC0000191
-#define STATUS_NETLOGON_NOT_STARTED 0xC0000192
-#define STATUS_ACCOUNT_EXPIRED 0xC0000193
-#define STATUS_POSSIBLE_DEADLOCK 0xC0000194
-#define STATUS_NETWORK_CREDENTIAL_CONFLICT 0xC0000195
-#define STATUS_REMOTE_SESSION_LIMIT 0xC0000196
-#define STATUS_EVENTLOG_FILE_CHANGED 0xC0000197
-#define STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT 0xC0000198
-#define STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT 0xC0000199
-#define STATUS_NOLOGON_SERVER_TRUST_ACCOUNT 0xC000019A
-#define STATUS_DOMAIN_TRUST_INCONSISTENT 0xC000019B
-#define STATUS_FS_DRIVER_REQUIRED 0xC000019C
-
-#define STATUS_RESOURCE_LANG_NOT_FOUND 0xC0000204
-
-#define MAXIMUM_WAIT_OBJECTS 64
-#define MAXIMUM_SUSPEND_COUNT 127
-
-
-/*
- * Return values from the actual exception handlers
- */
-
-#define ExceptionContinueExecution 0
-#define ExceptionContinueSearch 1
-#define ExceptionNestedException 2
-#define ExceptionCollidedUnwind 3
-
-/*
- * Return values from filters in except() and from UnhandledExceptionFilter
- */
-
-#define EXCEPTION_EXECUTE_HANDLER 1
-#define EXCEPTION_CONTINUE_SEARCH 0
-#define EXCEPTION_CONTINUE_EXECUTION -1
-
-/*
- * From OS/2 2.0 exception handling
- * Win32 seems to use the same flags as ExceptionFlags in an EXCEPTION_RECORD
- */
-
-#define EH_NONCONTINUABLE 0x01
-#define EH_UNWINDING 0x02
-#define EH_EXIT_UNWIND 0x04
-#define EH_STACK_INVALID 0x08
-#define EH_NESTED_CALL 0x10
-
-#define EXCEPTION_CONTINUABLE 0
-#define EXCEPTION_NONCONTINUABLE EH_NONCONTINUABLE
-
-/*
- * The exception record used by Win32 to give additional information
- * about exception to exception handlers.
- */
-
-#define EXCEPTION_MAXIMUM_PARAMETERS 15
-
-typedef struct EXCEPTION_RECORD
-{
- DWORD ExceptionCode;
- DWORD ExceptionFlags;
- struct EXCEPTION_RECORD *ExceptionRecord;
-
- LPVOID ExceptionAddress;
- DWORD NumberParameters;
- DWORD ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
-} EXCEPTION_RECORD, *PEXCEPTION_RECORD;
-
-/*
- * The exception pointers structure passed to exception filters
- * in except() and the UnhandledExceptionFilter().
- */
-
-typedef struct EXCEPTION_POINTERS
-{
- PEXCEPTION_RECORD ExceptionRecord;
- PCONTEXT ContextRecord;
-} EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
-
-