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;
182 #define STDCALL __attribute__ ((stdcall))
185 #define CDECL __attribute((cdecl))
187 #define CALLBACK WINAPI
188 #define PASCAL WINAPI
200 typedef struct _LIST_ENTRY {
201 struct _LIST_ENTRY *Flink;
202 struct _LIST_ENTRY *Blink;
203 } LIST_ENTRY, *PLIST_ENTRY;
205 typedef struct _SINGLE_LIST_ENTRY {
206 struct _SINGLE_LIST_ENTRY *Next;
207 } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
209 typedef DWORD STDCALL (*PTHREAD_START_ROUTINE) (LPVOID);
210 typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE;
212 typedef unsigned short *PWCHAR;
215 #define CONTEXT_CONTROL 1L
216 #define CONTEXT_FLOATING_POINT 2L
217 #define CONTEXT_INTEGER 4L
218 #define CONTEXT_DEBUG_REGISTERS 8L
220 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
221 #define CONTEXT_DEBUGGER (CONTEXT_FULL)
224 /* The doc refered me to winnt.h, so I had to look... */
225 #define SIZE_OF_80387_REGISTERS 80
227 /* Values for contextflags */
228 #define CONTEXT_i386 0x10000
229 #define CONTEXT_CONTROL (CONTEXT_i386 | 1)
230 #define CONTEXT_INTEGER (CONTEXT_i386 | 2)
231 #define CONTEXT_SEGMENTS (CONTEXT_i386 | 4)
232 #define CONTEXT_FLOATING_POINT (CONTEXT_i386 | 8)
233 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x10)
234 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
236 /* our own invention */
237 #define FLAG_TRACE_BIT 0x100
238 #define CONTEXT_DEBUGGER (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
242 typedef struct _FLOATING_SAVE_AREA {
250 BYTE RegisterArea[80];
252 } FLOATING_SAVE_AREA;
254 typedef struct _CONTEXT_X86 {
264 FLOATING_SAVE_AREA FloatSave;
284 } CONTEXT_X86, *PCONTEXT_X86, *LPCONTEXT_X86;
286 typedef struct _CONTEXT_PPC
288 /* Floating point registers returned when CONTEXT_FLOATING_POINT is set */
323 /* Integer registers returned when CONTEXT_INTEGER is set. */
357 DWORD Cr; /* Condition register */
358 DWORD Xer; /* Fixed point exception register */
360 /* The following are set when CONTEXT_CONTROL is set. */
361 DWORD Msr; /* Machine status register */
362 DWORD Iar; /* Instruction address register */
363 DWORD Lr; /* Link register */
364 DWORD Ctr; /* Control register */
366 /* Control which context values are returned */
370 /* Registers returned if CONTEXT_DEBUG_REGISTERS is set. */
371 DWORD Dr0; /* Breakpoint Register 1 */
372 DWORD Dr1; /* Breakpoint Register 2 */
373 DWORD Dr2; /* Breakpoint Register 3 */
374 DWORD Dr3; /* Breakpoint Register 4 */
375 DWORD Dr4; /* Breakpoint Register 5 */
376 DWORD Dr5; /* Breakpoint Register 6 */
377 DWORD Dr6; /* Debug Status Register */
378 DWORD Dr7; /* Debug Control Register */
379 } CONTEXT_PPC, *PCONTEXT_PPC, *LPCONTEXT_PPC;
383 typedef CONTEXT_X86 CONTEXT;
384 typedef PCONTEXT_X86 PCONTEXT;
385 typedef LPCONTEXT_X86 LPCONTEXT;
389 typedef CONTEXT_PPC CONTEXT;
390 typedef PCONTEXT_PPC PCONTEXT;
391 typedef LPCONTEXT_PPC LPCONTEXT;
395 typedef HANDLE *PHANDLE;
397 typedef struct value_ent {
402 } WVALENT, *PWVALENT;
405 typedef const void *LPCVOID;
406 typedef BYTE *LPBYTE, *PBYTE;
411 typedef DWORD *PLCID;
413 typedef const char *LPCSTR;
417 typedef const unsigned short *LPCWSTR;
419 typedef unsigned short RTL_ATOM;
420 typedef unsigned short *PRTL_ATOM;
423 typedef struct _COORD {
428 typedef struct _SMALL_RECT {
433 } SMALL_RECT, *PSMALL_RECT;
438 LPVOID lpArgToCompletionRoutine,
439 DWORD dwTimerLowValue,
440 DWORD dwTimerHighValue
445 #endif /* __INCLUDE_TYPES_H */