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
20 #define STDCALL_FUNC STDCALL
22 #define STDCALL_FUNC(a) (__stdcall a )
25 /* Fixed precision types */
26 typedef signed char INT8, *PINT8;
27 typedef signed short INT16, *PINT16;
29 typedef unsigned char UINT8, *PUINT8;
30 typedef unsigned short UINT16, *PUINT16;
33 /* Check VOID before defining CHAR, SHORT */
44 #define STDCALL __attribute__ ((stdcall))
45 #define CDECL __attribute__ ((cdecl))
46 #define CALLBACK WINAPI
56 #define STDCALL __stdcall
66 /* 64-bit architecture */
68 typedef INT64 INT, *PINT;
69 typedef LONG64 LONG, *PLONG;
70 typedef DWORD64 DWORD, *PDWORD;
71 typedef UINT64 UINT, *PUINT;
72 typedef ULONG64 ULONG, *PULONG;
76 /* 32-bit architecture */
78 typedef INT32 INT, *PINT;
79 typedef LONG32 LONG, *PLONG;
80 typedef DWORD32 DWORD, *PDWORD;
81 typedef UINT32 UINT, *PUINT;
82 typedef ULONG32 ULONG, *PULONG;
89 #define _WCHAR_T_DEFINED
90 #ifndef __WCHAR_TYPE__
91 #define __WCHAR_TYPE__ short unsigned int
95 typedef __WCHAR_TYPE__ wchar_t;
98 #endif /* wchar_t not already defined */
101 //#ifndef __cplusplus
102 //#ifndef _WCHAR_T_DEFINED
103 //#define _WCHAR_T_DEFINED
104 //typedef unsigned short wchar_t;
108 typedef unsigned char UCHAR;
109 typedef unsigned short USHORT;
110 typedef wchar_t WCHAR;
111 typedef unsigned short WORD;
113 typedef unsigned char BOOLEAN;
114 typedef BOOLEAN* PBOOLEAN;
115 typedef wchar_t *LPWSTR;
116 typedef wchar_t *PWSTR;
117 typedef unsigned char *PUCHAR;
118 typedef unsigned short *PUSHORT;
120 typedef unsigned char BYTE;
121 typedef void *LPVOID;
122 typedef float *PFLOAT;
123 typedef wchar_t *PWCH;
124 typedef unsigned short *PWORD;
126 #include <msvcrt/crttypes.h> // for definition of LONGLONG, PLONGLONG etc
128 typedef const void *LPCVOID;
129 typedef BYTE *LPBYTE, *PBYTE;
132 typedef DWORD *PLCID;
133 typedef const char *LPCSTR;
135 typedef const wchar_t *LPCWSTR;
138 typedef void *HANDLE;
139 typedef HANDLE *PHANDLE;
141 typedef CCHAR *PCCHAR;
142 typedef wchar_t *PWCHAR;
143 typedef ULONG WAIT_TYPE;
144 typedef USHORT CSHORT;
145 typedef const wchar_t *PCWSTR;
149 typedef DWORD STDCALL (*PTHREAD_START_ROUTINE) (LPVOID);
151 typedef DWORD (STDCALL *PTHREAD_START_ROUTINE) (LPVOID);
154 typedef union _LARGE_INTEGER
161 #ifdef ANONYMOUSUNIONS
167 #endif /* ANONYMOUSUNIONS */
169 } LARGE_INTEGER, *PLARGE_INTEGER;
171 typedef union _ULARGE_INTEGER
178 #ifdef ANONYMOUSUNIONS
184 #endif /* ANONYMOUSUNIONS */
186 } ULARGE_INTEGER, *PULARGE_INTEGER;
188 typedef struct _FILETIME
191 DWORD dwHighDateTime;
192 } FILETIME, *LPFILETIME, *PFILETIME;
194 typedef struct _LIST_ENTRY
196 struct _LIST_ENTRY *Flink;
197 struct _LIST_ENTRY *Blink;
198 } LIST_ENTRY, *PLIST_ENTRY;
200 typedef struct _SINGLE_LIST_ENTRY
202 struct _SINGLE_LIST_ENTRY *Next;
203 } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
205 typedef struct _UNICODE_STRING
208 USHORT MaximumLength;
210 } UNICODE_STRING, *PUNICODE_STRING;
212 typedef struct _FLOATING_SAVE_AREA
221 BYTE RegisterArea[80];
223 } FLOATING_SAVE_AREA;
225 typedef unsigned short RTL_ATOM;
226 typedef unsigned short *PRTL_ATOM;
228 #else /* __USE_W32API */
232 #endif /* __USE_W32API */
241 #define NULL ((void*)0)
242 #endif /* __cplusplus */
248 #define CONTEXT_CONTROL 1L
249 #define CONTEXT_FLOATING_POINT 2L
250 #define CONTEXT_INTEGER 4L
251 #define CONTEXT_DEBUG_REGISTERS 8L
253 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
254 #define CONTEXT_DEBUGGER (CONTEXT_FULL)
258 #define SIZE_OF_80387_REGISTERS 80
260 /* Values for contextflags */
261 #define CONTEXT_i386 0x10000
265 #define CONTEXT_CONTROL (CONTEXT_i386 | 1)
266 #define CONTEXT_INTEGER (CONTEXT_i386 | 2)
267 #define CONTEXT_SEGMENTS (CONTEXT_i386 | 4)
268 #define CONTEXT_FLOATING_POINT (CONTEXT_i386 | 8)
269 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x10)
270 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
272 #endif /* !__USE_W32API */
274 /* our own invention */
275 #define FLAG_TRACE_BIT 0x100
276 #define CONTEXT_DEBUGGER (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
280 typedef struct _CONTEXT_X86
291 FLOATING_SAVE_AREA FloatSave;
311 } CONTEXT_X86, *PCONTEXT_X86, *LPCONTEXT_X86;
313 typedef struct _CONTEXT_PPC
315 /* Floating point registers returned when CONTEXT_FLOATING_POINT is set */
350 /* Integer registers returned when CONTEXT_INTEGER is set. */
384 DWORD Cr; /* Condition register */
385 DWORD Xer; /* Fixed point exception register */
387 /* The following are set when CONTEXT_CONTROL is set. */
388 DWORD Msr; /* Machine status register */
389 DWORD Iar; /* Instruction address register */
390 DWORD Lr; /* Link register */
391 DWORD Ctr; /* Control register */
393 /* Control which context values are returned */
397 /* Registers returned if CONTEXT_DEBUG_REGISTERS is set. */
398 DWORD Dr0; /* Breakpoint Register 1 */
399 DWORD Dr1; /* Breakpoint Register 2 */
400 DWORD Dr2; /* Breakpoint Register 3 */
401 DWORD Dr3; /* Breakpoint Register 4 */
402 DWORD Dr4; /* Breakpoint Register 5 */
403 DWORD Dr5; /* Breakpoint Register 6 */
404 DWORD Dr6; /* Debug Status Register */
405 DWORD Dr7; /* Debug Control Register */
406 } CONTEXT_PPC, *PCONTEXT_PPC, *LPCONTEXT_PPC;
408 typedef struct value_ent
414 } WVALENT, *PWVALENT;
416 //#include "except.h"
420 typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE;
424 typedef CONTEXT_X86 CONTEXT;
425 typedef PCONTEXT_X86 PCONTEXT;
426 typedef LPCONTEXT_X86 LPCONTEXT;
430 typedef CONTEXT_PPC CONTEXT;
431 typedef PCONTEXT_PPC PCONTEXT;
432 typedef LPCONTEXT_PPC LPCONTEXT;
438 typedef struct _COORD
444 typedef struct _SMALL_RECT
450 } SMALL_RECT, *PSMALL_RECT;
456 LPVOID lpArgToCompletionRoutine,
457 DWORD dwTimerLowValue,
458 DWORD dwTimerHighValue
462 (STDCALL *PTIMERAPCROUTINE)(
463 LPVOID lpArgToCompletionRoutine,
464 DWORD dwTimerLowValue,
465 DWORD dwTimerHighValue
471 #else /* __USE_W32API */
473 typedef LPTHREAD_START_ROUTINE PTHREAD_START_ROUTINE;
475 #include <ddk/ntapi.h>
477 #endif /* __USE_W32API */
479 #endif /* __INCLUDE_TYPES_H */