#ifndef __INCLUDE_TYPES_H
#define __INCLUDE_TYPES_H
+#include <basetsd.h>
+
+#ifdef __GNUC__
+#define STDCALL_FUNC STDCALL
+#else
+#define STDCALL_FUNC(a) (__stdcall a )
+#endif /*__GNUC__*/
+
/* Fixed precision types */
typedef signed char INT8, *PINT8;
typedef signed short INT16, *PINT16;
-typedef signed int INT32, *PINT32;
-typedef signed long long INT64, *PINT64;
+
typedef unsigned char UINT8, *PUINT8;
typedef unsigned short UINT16, *PUINT16;
-typedef unsigned int UINT32, *PUINT32;
-typedef unsigned long long UINT64, *PUINT64;
-typedef signed long int LONG32, *PLONG32;
-typedef unsigned long int ULONG32, *PULONG32;
-typedef unsigned long int DWORD32, *PDWORD32;
+/* Check VOID before defining CHAR, SHORT */
+#ifndef VOID
+#define VOID void
+typedef char CHAR;
+typedef short SHORT;
+#endif
+
+
+#ifndef __USE_W32API
+
+#ifdef i386
+#define STDCALL __attribute__ ((stdcall))
+#define CDECL __attribute__ ((cdecl))
+#define CALLBACK WINAPI
+#define PASCAL WINAPI
+#else
+
+#ifdef __GNUC__
+#define STDCALL
+#define CDECL
+#define CALLBACK
+#define PASCAL
+#else
+#define STDCALL __stdcall
+#define CDECL __cdecl
+#define CALLBACK
+#define PASCAL
+#endif /*__GNUC__*/
+
+#endif /*i386*/
#ifdef _WIN64
typedef UINT64 UINT, *PUINT;
typedef ULONG64 ULONG, *PULONG;
-/* Pointer precision types */
-typedef long long INT_PTR, *PINT_PTR;
-typedef unsigned long long UINT_PTR, *PUINT_PTR;
-typedef long long LONG_PTR, *PLONG_PTR;
-typedef unsigned long long ULONG_PTR, *PULONG_PTR;
-typedef unsigned long long HANDLE_PTR;
-typedef unsigned int UHALF_PTR, *PUHALF_PTR;
-typedef int HALF_PTR, *PHALF_PTR;
-
#else /* _WIN64 */
/* 32-bit architecture */
typedef UINT32 UINT, *PUINT;
typedef ULONG32 ULONG, *PULONG;
-
-/* Pointer precision types */
-typedef int INT_PTR, *PINT_PTR;
-typedef unsigned int UINT_PTR, *PUINT_PTR;
-typedef long LONG_PTR, *PLONG_PTR;
-typedef unsigned long ULONG_PTR, *PULONG_PTR;
-typedef unsigned short UHALF_PTR, *PUHALF_PTR;
-typedef short HALF_PTR, *PHALF_PTR;
-typedef unsigned long HANDLE_PTR;
-
#endif /* _WIN64 */
-typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR;
+#ifndef _WCHAR_T_
+#define _WCHAR_T_
+#define _WCHAR_T
+#define _WCHAR_T_DEFINED
+#ifndef __WCHAR_TYPE__
+#define __WCHAR_TYPE__ short unsigned int
+#endif
-typedef long long LONG64, *PLONG64;
+#ifndef __cplusplus
+typedef __WCHAR_TYPE__ wchar_t;
+#endif /* C++ */
-typedef unsigned long long ULONG64, *PULONG64;
-typedef unsigned long long DWORD64, *PDWORD64;
+#endif /* wchar_t not already defined */
+//#ifndef __cplusplus
+//#ifndef _WCHAR_T_DEFINED
+//#define _WCHAR_T_DEFINED
+//typedef unsigned short wchar_t;
+//#endif
+//#endif
+
typedef unsigned char UCHAR;
typedef unsigned short USHORT;
-typedef unsigned short WCHAR;
+typedef wchar_t WCHAR;
typedef unsigned short WORD;
typedef int BOOL;
typedef unsigned char BOOLEAN;
typedef BOOLEAN* PBOOLEAN;
-typedef unsigned short *LPWSTR;
-typedef unsigned short *PWSTR;
+typedef wchar_t *LPWSTR;
+typedef wchar_t *PWSTR;
typedef unsigned char *PUCHAR;
typedef unsigned short *PUSHORT;
typedef void *PVOID;
typedef unsigned char BYTE;
typedef void *LPVOID;
typedef float *PFLOAT;
-typedef unsigned short *PWCH;
+typedef wchar_t *PWCH;
typedef unsigned short *PWORD;
-typedef long long LONGLONG;
-typedef unsigned long long ULONGLONG;
-typedef long long *PLONGLONG;
-typedef unsigned long long *PULONGLONG;
-
-/* Check VOID before defining CHAR, SHORT */
-#ifndef VOID
-#define VOID void
-typedef char CHAR;
-typedef short SHORT;
-#endif
+#include <msvcrt/crttypes.h> // for definition of LONGLONG, PLONGLONG etc
+typedef const void *LPCVOID;
+typedef BYTE *LPBYTE, *PBYTE;
+typedef BOOL *PBOOL;
+typedef DWORD LCID;
+typedef DWORD *PLCID;
+typedef const char *LPCSTR;
+typedef char *LPSTR;
+typedef const wchar_t *LPCWSTR;
typedef CHAR *PCHAR;
typedef CHAR *PCH;
typedef void *HANDLE;
+typedef HANDLE *PHANDLE;
typedef char CCHAR;
typedef CCHAR *PCCHAR;
+typedef wchar_t *PWCHAR;
+typedef ULONG WAIT_TYPE;
+typedef USHORT CSHORT;
+typedef const wchar_t *PCWSTR;
+typedef char* PCSZ;
-
-#define FALSE 0
-#define TRUE 1
-
-#ifndef NULL
-#ifdef __cplusplus
-#define NULL 0
+#ifdef __GNUC__
+typedef DWORD STDCALL (*PTHREAD_START_ROUTINE) (LPVOID);
#else
-#define NULL ((void*)0)
-#endif /* __cplusplus */
-#endif /* NULL */
-
-typedef const unsigned short *PCWSTR;
-
-typedef char* PCSZ;
+typedef DWORD (STDCALL *PTHREAD_START_ROUTINE) (LPVOID);
+#endif /*__GNUC__*/
typedef union _LARGE_INTEGER
{
typedef struct _FILETIME
{
- DWORD dwLowDateTime;
- DWORD dwHighDateTime;
+ DWORD dwLowDateTime;
+ DWORD dwHighDateTime;
} FILETIME, *LPFILETIME, *PFILETIME;
-#define CONST const
-
-#ifdef i386
-#define STDCALL __attribute__ ((stdcall))
-#define CDECL __attribute((cdecl))
-#define CALLBACK WINAPI
-#define PASCAL WINAPI
-#else
-#define STDCALL
-#define CDECL
-#define CALLBACK
-#define PASCAL
-#endif
-
-typedef struct _LIST_ENTRY {
+typedef struct _LIST_ENTRY
+{
struct _LIST_ENTRY *Flink;
struct _LIST_ENTRY *Blink;
} LIST_ENTRY, *PLIST_ENTRY;
-typedef struct _SINGLE_LIST_ENTRY {
+typedef struct _SINGLE_LIST_ENTRY
+{
struct _SINGLE_LIST_ENTRY *Next;
} SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
-typedef DWORD STDCALL (*PTHREAD_START_ROUTINE) (LPVOID);
-typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE;
+typedef struct _UNICODE_STRING
+{
+ USHORT Length;
+ USHORT MaximumLength;
+ PWSTR Buffer;
+} UNICODE_STRING, *PUNICODE_STRING;
-typedef unsigned short *PWCHAR;
+typedef struct _FLOATING_SAVE_AREA
+{
+ DWORD ControlWord;
+ DWORD StatusWord;
+ DWORD TagWord;
+ DWORD ErrorOffset;
+ DWORD ErrorSelector;
+ DWORD DataOffset;
+ DWORD DataSelector;
+ BYTE RegisterArea[80];
+ DWORD Cr0NpxState;
+} FLOATING_SAVE_AREA;
+
+typedef unsigned short RTL_ATOM;
+typedef unsigned short *PRTL_ATOM;
+
+#else /* __USE_W32API */
+
+#include <windows.h>
+
+#endif /* __USE_W32API */
+
+#define FALSE 0
+#define TRUE 1
+
+#ifndef NULL
+#ifdef __cplusplus
+#define NULL 0
+#else
+#define NULL ((void*)0)
+#endif /* __cplusplus */
+#endif /* NULL */
+
+#define CONST const
#ifdef __PPC__
#define CONTEXT_CONTROL 1L
#define CONTEXT_DEBUGGER (CONTEXT_FULL)
#else /* x86 */
-/* The doc refered me to winnt.h, so I had to look... */
+
#define SIZE_OF_80387_REGISTERS 80
/* Values for contextflags */
#define CONTEXT_i386 0x10000
-#define CONTEXT_CONTROL (CONTEXT_i386 | 1)
-#define CONTEXT_INTEGER (CONTEXT_i386 | 2)
-#define CONTEXT_SEGMENTS (CONTEXT_i386 | 4)
-#define CONTEXT_FLOATING_POINT (CONTEXT_i386 | 8)
+
+#ifndef __USE_W32API
+
+#define CONTEXT_CONTROL (CONTEXT_i386 | 1)
+#define CONTEXT_INTEGER (CONTEXT_i386 | 2)
+#define CONTEXT_SEGMENTS (CONTEXT_i386 | 4)
+#define CONTEXT_FLOATING_POINT (CONTEXT_i386 | 8)
#define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x10)
#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
+#endif /* !__USE_W32API */
+
/* our own invention */
#define FLAG_TRACE_BIT 0x100
#define CONTEXT_DEBUGGER (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
#endif
-typedef struct _FLOATING_SAVE_AREA {
- DWORD ControlWord;
- DWORD StatusWord;
- DWORD TagWord;
- DWORD ErrorOffset;
- DWORD ErrorSelector;
- DWORD DataOffset;
- DWORD DataSelector;
- BYTE RegisterArea[80];
- DWORD Cr0NpxState;
-} FLOATING_SAVE_AREA;
-
-typedef struct _CONTEXT_X86 {
- DWORD ContextFlags;
-
- DWORD Dr0;
- DWORD Dr1;
- DWORD Dr2;
- DWORD Dr3;
- DWORD Dr6;
- DWORD Dr7;
-
- FLOATING_SAVE_AREA FloatSave;
-
- DWORD SegGs;
- DWORD SegFs;
- DWORD SegEs;
- DWORD SegDs;
-
- DWORD Edi;
- DWORD Esi;
- DWORD Ebx;
- DWORD Edx;
- DWORD Ecx;
- DWORD Eax;
-
- DWORD Ebp;
- DWORD Eip;
- DWORD SegCs;
- DWORD EFlags;
- DWORD Esp;
- DWORD SegSs;
+typedef struct _CONTEXT_X86
+{
+ DWORD ContextFlags;
+
+ DWORD Dr0;
+ DWORD Dr1;
+ DWORD Dr2;
+ DWORD Dr3;
+ DWORD Dr6;
+ DWORD Dr7;
+
+ FLOATING_SAVE_AREA FloatSave;
+
+ DWORD SegGs;
+ DWORD SegFs;
+ DWORD SegEs;
+ DWORD SegDs;
+
+ DWORD Edi;
+ DWORD Esi;
+ DWORD Ebx;
+ DWORD Edx;
+ DWORD Ecx;
+ DWORD Eax;
+
+ DWORD Ebp;
+ DWORD Eip;
+ DWORD SegCs;
+ DWORD EFlags;
+ DWORD Esp;
+ DWORD SegSs;
} CONTEXT_X86, *PCONTEXT_X86, *LPCONTEXT_X86;
typedef struct _CONTEXT_PPC
- {
- /* Floating point registers returned when CONTEXT_FLOATING_POINT is set */
- 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;
-
- /* Integer registers returned when CONTEXT_INTEGER is set. */
- 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; /* Condition register */
- DWORD Xer; /* Fixed point exception register */
-
- /* The following are set when CONTEXT_CONTROL is set. */
- DWORD Msr; /* Machine status register */
- DWORD Iar; /* Instruction address register */
- DWORD Lr; /* Link register */
- DWORD Ctr; /* Control register */
-
- /* Control which context values are returned */
- DWORD ContextFlags;
- DWORD Fill[3];
-
- /* Registers returned if CONTEXT_DEBUG_REGISTERS is set. */
- DWORD Dr0; /* Breakpoint Register 1 */
- DWORD Dr1; /* Breakpoint Register 2 */
- DWORD Dr2; /* Breakpoint Register 3 */
- DWORD Dr3; /* Breakpoint Register 4 */
- DWORD Dr4; /* Breakpoint Register 5 */
- DWORD Dr5; /* Breakpoint Register 6 */
- DWORD Dr6; /* Debug Status Register */
- DWORD Dr7; /* Debug Control Register */
+{
+ /* Floating point registers returned when CONTEXT_FLOATING_POINT is set */
+ 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;
+
+ /* Integer registers returned when CONTEXT_INTEGER is set. */
+ 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; /* Condition register */
+ DWORD Xer; /* Fixed point exception register */
+
+ /* The following are set when CONTEXT_CONTROL is set. */
+ DWORD Msr; /* Machine status register */
+ DWORD Iar; /* Instruction address register */
+ DWORD Lr; /* Link register */
+ DWORD Ctr; /* Control register */
+
+ /* Control which context values are returned */
+ DWORD ContextFlags;
+ DWORD Fill[3];
+
+ /* Registers returned if CONTEXT_DEBUG_REGISTERS is set. */
+ DWORD Dr0; /* Breakpoint Register 1 */
+ DWORD Dr1; /* Breakpoint Register 2 */
+ DWORD Dr2; /* Breakpoint Register 3 */
+ DWORD Dr3; /* Breakpoint Register 4 */
+ DWORD Dr4; /* Breakpoint Register 5 */
+ DWORD Dr5; /* Breakpoint Register 6 */
+ DWORD Dr6; /* Debug Status Register */
+ DWORD Dr7; /* Debug Control Register */
} CONTEXT_PPC, *PCONTEXT_PPC, *LPCONTEXT_PPC;
+typedef struct value_ent
+{
+ LPWSTR ve_valuename;
+ DWORD ve_valuelen;
+ DWORD ve_valueptr;
+ DWORD ve_type;
+} WVALENT, *PWVALENT;
+
+//#include "except.h"
+
+#ifndef __USE_W32API
+
+typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE;
+
#ifdef __i386__
typedef CONTEXT_X86 CONTEXT;
#endif
-typedef HANDLE *PHANDLE;
-
-typedef struct value_ent {
- LPWSTR ve_valuename;
- DWORD ve_valuelen;
- DWORD ve_valueptr;
- DWORD ve_type;
-} WVALENT, *PWVALENT;
-
-
-typedef const void *LPCVOID;
-typedef BYTE *LPBYTE, *PBYTE;
-
-typedef BOOL *PBOOL;
-
-typedef DWORD LCID;
-typedef DWORD *PLCID;
-
-typedef const char *LPCSTR;
-
-typedef char *LPSTR;
-
-typedef const unsigned short *LPCWSTR;
-
-typedef unsigned short RTL_ATOM;
-typedef unsigned short *PRTL_ATOM;
typedef WORD ATOM;
-typedef struct _COORD {
+typedef struct _COORD
+{
SHORT X;
SHORT Y;
} COORD;
-typedef struct _SMALL_RECT {
+typedef struct _SMALL_RECT
+{
SHORT Left;
SHORT Top;
SHORT Right;
} SMALL_RECT, *PSMALL_RECT;
+#ifdef __GNUC__
typedef VOID STDCALL
(*PTIMERAPCROUTINE)(
LPVOID lpArgToCompletionRoutine,
DWORD dwTimerLowValue,
DWORD dwTimerHighValue
);
+#else
+typedef VOID
+(STDCALL *PTIMERAPCROUTINE)(
+ LPVOID lpArgToCompletionRoutine,
+ DWORD dwTimerLowValue,
+ DWORD dwTimerHighValue
+ );
+#endif /*__GNUC__*/
#include "except.h"
+#else /* __USE_W32API */
+
+typedef LPTHREAD_START_ROUTINE PTHREAD_START_ROUTINE;
+
+#include <ddk/ntapi.h>
+
+#endif /* __USE_W32API */
+
#endif /* __INCLUDE_TYPES_H */