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 typedef unsigned short WCHAR;
84 typedef unsigned short WORD;
86 typedef unsigned char BOOLEAN;
87 typedef BOOLEAN* PBOOLEAN;
88 typedef unsigned short *LPWSTR;
89 typedef unsigned short *PWSTR;
90 typedef unsigned char *PUCHAR;
91 typedef unsigned short *PUSHORT;
93 typedef unsigned char BYTE;
95 typedef float *PFLOAT;
96 typedef unsigned short *PWCH;
97 typedef unsigned short *PWORD;
99 typedef long long LONGLONG;
100 typedef unsigned long long ULONGLONG;
101 typedef long long *PLONGLONG;
102 typedef unsigned long long *PULONGLONG;
104 /* Check VOID before defining CHAR, SHORT */
113 typedef void *HANDLE;
115 typedef CCHAR *PCCHAR;
125 #define NULL ((void*)0)
126 #endif /* __cplusplus */
129 typedef const unsigned short *PCWSTR;
133 typedef union _LARGE_INTEGER
140 #ifdef ANONYMOUSUNIONS
146 #endif /* ANONYMOUSUNIONS */
148 } LARGE_INTEGER, *PLARGE_INTEGER;
150 typedef union _ULARGE_INTEGER
157 #ifdef ANONYMOUSUNIONS
163 #endif /* ANONYMOUSUNIONS */
165 } ULARGE_INTEGER, *PULARGE_INTEGER;
167 typedef struct _FILETIME
170 DWORD dwHighDateTime;
171 } FILETIME, *LPFILETIME, *PFILETIME;
176 #define STDCALL __attribute__ ((stdcall))
177 #define CDECL __attribute((cdecl))
178 #define CALLBACK WINAPI
179 #define PASCAL WINAPI
187 typedef struct _LIST_ENTRY {
188 struct _LIST_ENTRY *Flink;
189 struct _LIST_ENTRY *Blink;
190 } LIST_ENTRY, *PLIST_ENTRY;
192 typedef struct _SINGLE_LIST_ENTRY {
193 struct _SINGLE_LIST_ENTRY *Next;
194 } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
196 typedef DWORD STDCALL (*PTHREAD_START_ROUTINE) (LPVOID);
197 typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE;
199 typedef unsigned short *PWCHAR;
202 #define CONTEXT_CONTROL 1L
203 #define CONTEXT_FLOATING_POINT 2L
204 #define CONTEXT_INTEGER 4L
205 #define CONTEXT_DEBUG_REGISTERS 8L
207 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
208 #define CONTEXT_DEBUGGER (CONTEXT_FULL)
211 /* The doc refered me to winnt.h, so I had to look... */
212 #define SIZE_OF_80387_REGISTERS 80
214 /* Values for contextflags */
215 #define CONTEXT_i386 0x10000
216 #define CONTEXT_CONTROL (CONTEXT_i386 | 1)
217 #define CONTEXT_INTEGER (CONTEXT_i386 | 2)
218 #define CONTEXT_SEGMENTS (CONTEXT_i386 | 4)
219 #define CONTEXT_FLOATING_POINT (CONTEXT_i386 | 8)
220 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x10)
221 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
223 /* our own invention */
224 #define FLAG_TRACE_BIT 0x100
225 #define CONTEXT_DEBUGGER (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
229 typedef struct _FLOATING_SAVE_AREA {
237 BYTE RegisterArea[80];
239 } FLOATING_SAVE_AREA;
241 typedef struct _CONTEXT_X86 {
251 FLOATING_SAVE_AREA FloatSave;
271 } CONTEXT_X86, *PCONTEXT_X86, *LPCONTEXT_X86;
273 typedef struct _CONTEXT_PPC
275 /* Floating point registers returned when CONTEXT_FLOATING_POINT is set */
310 /* Integer registers returned when CONTEXT_INTEGER is set. */
344 DWORD Cr; /* Condition register */
345 DWORD Xer; /* Fixed point exception register */
347 /* The following are set when CONTEXT_CONTROL is set. */
348 DWORD Msr; /* Machine status register */
349 DWORD Iar; /* Instruction address register */
350 DWORD Lr; /* Link register */
351 DWORD Ctr; /* Control register */
353 /* Control which context values are returned */
357 /* Registers returned if CONTEXT_DEBUG_REGISTERS is set. */
358 DWORD Dr0; /* Breakpoint Register 1 */
359 DWORD Dr1; /* Breakpoint Register 2 */
360 DWORD Dr2; /* Breakpoint Register 3 */
361 DWORD Dr3; /* Breakpoint Register 4 */
362 DWORD Dr4; /* Breakpoint Register 5 */
363 DWORD Dr5; /* Breakpoint Register 6 */
364 DWORD Dr6; /* Debug Status Register */
365 DWORD Dr7; /* Debug Control Register */
366 } CONTEXT_PPC, *PCONTEXT_PPC, *LPCONTEXT_PPC;
370 typedef CONTEXT_X86 CONTEXT;
371 typedef PCONTEXT_X86 PCONTEXT;
372 typedef LPCONTEXT_X86 LPCONTEXT;
376 typedef CONTEXT_PPC CONTEXT;
377 typedef PCONTEXT_PPC PCONTEXT;
378 typedef LPCONTEXT_PPC LPCONTEXT;
382 typedef HANDLE *PHANDLE;
384 typedef struct value_ent {
389 } WVALENT, *PWVALENT;
392 typedef const void *LPCVOID;
393 typedef BYTE *LPBYTE, *PBYTE;
398 typedef DWORD *PLCID;
400 typedef const char *LPCSTR;
404 typedef const unsigned short *LPCWSTR;
406 typedef unsigned short RTL_ATOM;
407 typedef unsigned short *PRTL_ATOM;
410 typedef struct _COORD {
415 typedef struct _SMALL_RECT {
420 } SMALL_RECT, *PSMALL_RECT;
425 LPVOID lpArgToCompletionRoutine,
426 DWORD dwTimerLowValue,
427 DWORD dwTimerHighValue
432 #endif /* __INCLUDE_TYPES_H */