| /* |
| * Win32 definitions for Windows NT |
| * |
| * Copyright 1996 Alexandre Julliard |
| */ |
| |
| #ifndef __WINE_WINNT_H |
| #define __WINE_WINNT_H |
| |
| #include "wintypes.h" |
| |
| /* 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 */ |
| |
| /* The Win32 register context */ |
| |
| #define CONTEXT_i386 0x00010000 |
| #define CONTEXT_i486 CONTEXT_i386 |
| #define CONTEXT_CONTROL (CONTEXT_i386 | 0x0001) /* SS:SP, CS:IP, FLAGS, BP */ |
| #define CONTEXT_INTEGER (CONTEXT_i386 | 0x0002) /* AX, BX, CX, DX, SI, DI */ |
| #define CONTEXT_SEGMENTS (CONTEXT_i386 | 0x0004) /* DS, ES, FS, GS */ |
| #define CONTEXT_FLOATING_POINT (CONTEXT_i386 | 0x0008L) /* 387 state */ |
| #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x0010L) /* DB 0-3,6,7 */ |
| #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS) |
| |
| #define SIZE_OF_80387_REGISTERS 80 |
| |
| typedef struct |
| { |
| 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; |
| |
| typedef struct |
| { |
| 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; |
| } CONTEXT, *PCONTEXT; |
| |
| |
| #ifdef __WINE__ |
| |
| /* Macros for easier access to 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 IP_reg(context) (*(WORD*)&EIP_reg(context)) |
| #define SP_reg(context) (*(WORD*)&ESP_reg(context)) |
| |
| #define FL_reg(context) (*(WORD*)&EFL_reg(context)) |
| |
| #define SET_CFLAG(context) (EFL_reg(context) |= 0x0001) |
| #define RESET_CFLAG(context) (EFL_reg(context) &= 0xfffffffe) |
| |
| #endif /* __WINE__ */ |
| |
| #endif /* __WINE_WINNT_H */ |