2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * FILE: include/types.h
5 * PURPOSE: Types used by all the parts of the system
6 * PROGRAMMER: David Welch <welch@cwcom.net>
7 * DEFINES: _WIN64: 64-bit architecture
8 * _WIN32: 32-bit architecture (default)
11 * 01/05/01: Portabillity changes
14 #ifndef __INCLUDE_TYPES_H
15 #define __INCLUDE_TYPES_H
17 /* Fixed precision types */
18 typedef signed char INT8, *PINT8;
19 typedef signed short INT16, *PINT16;
20 typedef signed int INT32, *PINT32;
21 typedef signed long long INT64, *PINT64;
22 typedef unsigned char UINT8, *PUINT8;
23 typedef unsigned short UINT16, *PUINT16;
24 typedef unsigned int UINT32, *PUINT32;
25 typedef unsigned long long UINT64, *PUINT64;
27 typedef signed long int LONG32, *PLONG32;
28 typedef unsigned long int ULONG32, *PULONG32;
29 typedef unsigned long int DWORD32, *PDWORD32;
34 /* 64-bit architecture */
36 typedef INT64 INT, *PINT;
37 typedef LONG64 LONG, *PLONG;
38 typedef DWORD64 DWORD, *PDWORD;
39 typedef UINT64 UINT, *PUINT;
40 typedef ULONG64 ULONG, *PULONG;
42 /* Pointer precision types */
43 typedef long long INT_PTR, *PINT_PTR;
44 typedef unsigned long long UINT_PTR, *PUINT_PTR;
45 typedef long long LONG_PTR, *PLONG_PTR;
46 typedef unsigned long long ULONG_PTR, *PULONG_PTR;
47 typedef unsigned long long HANDLE_PTR;
48 typedef unsigned int UHALF_PTR, *PUHALF_PTR;
49 typedef int HALF_PTR, *PHALF_PTR;
53 /* 32-bit architecture */
55 typedef INT32 INT, *PINT;
56 typedef LONG32 LONG, *PLONG;
57 typedef DWORD32 DWORD, *PDWORD;
58 typedef UINT32 UINT, *PUINT;
59 typedef ULONG32 ULONG, *PULONG;
62 /* Pointer precision types */
63 typedef int INT_PTR, *PINT_PTR;
64 typedef unsigned int UINT_PTR, *PUINT_PTR;
65 typedef long LONG_PTR, *PLONG_PTR;
66 typedef unsigned long ULONG_PTR, *PULONG_PTR;
67 typedef unsigned short UHALF_PTR, *PUHALF_PTR;
68 typedef short HALF_PTR, *PHALF_PTR;
69 typedef unsigned long HANDLE_PTR;
73 typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR;
75 typedef long long LONG64, *PLONG64;
77 typedef unsigned long long ULONG64, *PULONG64;
78 typedef unsigned long long DWORD64, *PDWORD64;
81 typedef unsigned char UCHAR;
82 typedef unsigned short USHORT;
83 /* Yes, W32 uses 16-bit wchar_t requiring GCC -fshort-wchar option */
84 typedef unsigned short WCHAR;
85 typedef unsigned short WORD;
87 typedef unsigned char BOOLEAN;
88 typedef BOOLEAN* PBOOLEAN;
89 typedef unsigned short *LPWSTR;
90 typedef unsigned short *PWSTR;
91 typedef unsigned char *PUCHAR;
92 typedef unsigned short *PUSHORT;
94 typedef unsigned char BYTE;
96 typedef float *PFLOAT;
97 typedef unsigned short *PWCH;
98 typedef unsigned short *PWORD;
100 typedef long long LONGLONG;
101 typedef unsigned long long ULONGLONG;
102 typedef long long *PLONGLONG;
103 typedef unsigned long long *PULONGLONG;
105 /* Check VOID before defining CHAR, SHORT */
114 typedef void *HANDLE;
116 typedef CCHAR *PCCHAR;
130 #define NULL ((void*)0)
131 #endif /* __cplusplus */
134 typedef const unsigned short *PCWSTR;
136 typedef const char* PCSZ;
138 typedef union _LARGE_INTEGER
145 #ifdef ANONYMOUSUNIONS
151 #endif /* ANONYMOUSUNIONS */
153 } LARGE_INTEGER, *PLARGE_INTEGER;
155 typedef union _ULARGE_INTEGER
162 #ifdef ANONYMOUSUNIONS
168 #endif /* ANONYMOUSUNIONS */
170 } ULARGE_INTEGER, *PULARGE_INTEGER;
172 typedef struct _FILETIME
175 DWORD dwHighDateTime;
176 } FILETIME, *LPFILETIME, *PFILETIME;
181 #define STDCALL __attribute__ ((stdcall))
182 #define CDECL __attribute((cdecl))
183 #define CALLBACK WINAPI
184 #define PASCAL WINAPI
192 typedef struct _LIST_ENTRY {
193 struct _LIST_ENTRY *Flink;
194 struct _LIST_ENTRY *Blink;
195 } LIST_ENTRY, *PLIST_ENTRY;
197 typedef struct _SINGLE_LIST_ENTRY {
198 struct _SINGLE_LIST_ENTRY *Next;
199 } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
201 typedef DWORD STDCALL (*PTHREAD_START_ROUTINE) (LPVOID);
202 typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE;
204 typedef unsigned short *PWCHAR;
207 #define CONTEXT_CONTROL 1L
208 #define CONTEXT_FLOATING_POINT 2L
209 #define CONTEXT_INTEGER 4L
210 #define CONTEXT_DEBUG_REGISTERS 8L
212 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
213 #define CONTEXT_DEBUGGER (CONTEXT_FULL)
216 /* The doc refered me to winnt.h, so I had to look... */
217 #define SIZE_OF_80387_REGISTERS 80
219 /* Values for contextflags */
220 #define CONTEXT_i386 0x10000
221 #define CONTEXT_CONTROL (CONTEXT_i386 | 1)
222 #define CONTEXT_INTEGER (CONTEXT_i386 | 2)
223 #define CONTEXT_SEGMENTS (CONTEXT_i386 | 4)
224 #define CONTEXT_FLOATING_POINT (CONTEXT_i386 | 8)
225 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x10)
226 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
228 /* our own invention */
229 #define FLAG_TRACE_BIT 0x100
230 #define CONTEXT_DEBUGGER (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
234 typedef struct _FLOATING_SAVE_AREA {
242 BYTE RegisterArea[80];
244 } FLOATING_SAVE_AREA;
246 typedef struct _CONTEXT_X86 {
256 FLOATING_SAVE_AREA FloatSave;
276 } CONTEXT_X86, *PCONTEXT_X86, *LPCONTEXT_X86;
278 typedef struct _CONTEXT_PPC
280 /* Floating point registers returned when CONTEXT_FLOATING_POINT is set */
315 /* Integer registers returned when CONTEXT_INTEGER is set. */
349 DWORD Cr; /* Condition register */
350 DWORD Xer; /* Fixed point exception register */
352 /* The following are set when CONTEXT_CONTROL is set. */
353 DWORD Msr; /* Machine status register */
354 DWORD Iar; /* Instruction address register */
355 DWORD Lr; /* Link register */
356 DWORD Ctr; /* Control register */
358 /* Control which context values are returned */
362 /* Registers returned if CONTEXT_DEBUG_REGISTERS is set. */
363 DWORD Dr0; /* Breakpoint Register 1 */
364 DWORD Dr1; /* Breakpoint Register 2 */
365 DWORD Dr2; /* Breakpoint Register 3 */
366 DWORD Dr3; /* Breakpoint Register 4 */
367 DWORD Dr4; /* Breakpoint Register 5 */
368 DWORD Dr5; /* Breakpoint Register 6 */
369 DWORD Dr6; /* Debug Status Register */
370 DWORD Dr7; /* Debug Control Register */
371 } CONTEXT_PPC, *PCONTEXT_PPC, *LPCONTEXT_PPC;
375 typedef CONTEXT_X86 CONTEXT;
376 typedef PCONTEXT_X86 PCONTEXT;
377 typedef LPCONTEXT_X86 LPCONTEXT;
381 typedef CONTEXT_PPC CONTEXT;
382 typedef PCONTEXT_PPC PCONTEXT;
383 typedef LPCONTEXT_PPC LPCONTEXT;
387 typedef HANDLE *PHANDLE;
389 typedef struct value_ent {
394 } WVALENT, *PWVALENT;
397 typedef const void *LPCVOID;
398 typedef BYTE *LPBYTE, *PBYTE;
403 typedef DWORD *PLCID;
405 typedef const char *LPCSTR;
409 typedef const unsigned short *LPCWSTR;
411 typedef unsigned short RTL_ATOM;
412 typedef unsigned short *PRTL_ATOM;
415 typedef struct _COORD {
420 typedef struct _SMALL_RECT {
425 } SMALL_RECT, *PSMALL_RECT;
430 LPVOID lpArgToCompletionRoutine,
431 DWORD dwTimerLowValue,
432 DWORD dwTimerHighValue
437 #endif /* __INCLUDE_TYPES_H */