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 */
45 #define STDCALL __attribute__ ((stdcall))
48 #define CDECL __attribute((cdecl))
50 #define CALLBACK WINAPI
65 /* 64-bit architecture */
67 typedef INT64 INT, *PINT;
68 typedef LONG64 LONG, *PLONG;
69 typedef DWORD64 DWORD, *PDWORD;
70 typedef UINT64 UINT, *PUINT;
71 typedef ULONG64 ULONG, *PULONG;
75 /* 32-bit architecture */
77 typedef INT32 INT, *PINT;
78 typedef LONG32 LONG, *PLONG;
79 typedef DWORD32 DWORD, *PDWORD;
80 typedef UINT32 UINT, *PUINT;
81 typedef ULONG32 ULONG, *PULONG;
88 #define _WCHAR_T_DEFINED
89 #ifndef __WCHAR_TYPE__
90 #define __WCHAR_TYPE__ short unsigned int
94 typedef __WCHAR_TYPE__ wchar_t;
97 #endif /* wchar_t not already defined */
100 //#ifndef __cplusplus
101 //#ifndef _WCHAR_T_DEFINED
102 //#define _WCHAR_T_DEFINED
103 //typedef unsigned short wchar_t;
107 typedef unsigned char UCHAR;
108 typedef unsigned short USHORT;
109 typedef wchar_t WCHAR;
110 typedef unsigned short WORD;
112 typedef unsigned char BOOLEAN;
113 typedef BOOLEAN* PBOOLEAN;
114 typedef wchar_t *LPWSTR;
115 typedef wchar_t *PWSTR;
116 typedef unsigned char *PUCHAR;
117 typedef unsigned short *PUSHORT;
119 typedef unsigned char BYTE;
120 typedef void *LPVOID;
121 typedef float *PFLOAT;
122 typedef wchar_t *PWCH;
123 typedef unsigned short *PWORD;
125 #include <msvcrt/crttypes.h> // for definition of LONGLONG, PLONGLONG etc
127 typedef const void *LPCVOID;
128 typedef BYTE *LPBYTE, *PBYTE;
131 typedef DWORD *PLCID;
132 typedef const char *LPCSTR;
134 typedef const wchar_t *LPCWSTR;
137 typedef void *HANDLE;
138 typedef HANDLE *PHANDLE;
140 typedef CCHAR *PCCHAR;
141 typedef wchar_t *PWCHAR;
142 typedef ULONG WAIT_TYPE;
143 typedef USHORT CSHORT;
144 typedef const wchar_t *PCWSTR;
145 typedef const char* PCSZ;
148 typedef DWORD STDCALL (*PTHREAD_START_ROUTINE) (LPVOID);
150 typedef DWORD (STDCALL *PTHREAD_START_ROUTINE) (LPVOID);
153 typedef union _LARGE_INTEGER
160 #ifdef ANONYMOUSUNIONS
166 #endif /* ANONYMOUSUNIONS */
168 } LARGE_INTEGER, *PLARGE_INTEGER;
170 typedef union _ULARGE_INTEGER
177 #ifdef ANONYMOUSUNIONS
183 #endif /* ANONYMOUSUNIONS */
185 } ULARGE_INTEGER, *PULARGE_INTEGER;
187 typedef struct _FILETIME
190 DWORD dwHighDateTime;
191 } FILETIME, *LPFILETIME, *PFILETIME;
193 typedef struct _LIST_ENTRY
195 struct _LIST_ENTRY *Flink;
196 struct _LIST_ENTRY *Blink;
197 } LIST_ENTRY, *PLIST_ENTRY;
199 typedef struct _SINGLE_LIST_ENTRY
201 struct _SINGLE_LIST_ENTRY *Next;
202 } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
204 #define SLIST_ENTRY SINGLE_LIST_ENTRY
205 #define _SLIST_ENTRY _SINGLE_LIST_ENTRY
206 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
208 typedef struct _UNICODE_STRING
211 USHORT MaximumLength;
213 } UNICODE_STRING, *PUNICODE_STRING;
215 typedef struct _FLOATING_SAVE_AREA
224 BYTE RegisterArea[80];
226 } FLOATING_SAVE_AREA;
228 typedef unsigned short RTL_ATOM;
229 typedef unsigned short *PRTL_ATOM;
231 #else /* __USE_W32API */
235 #endif /* __USE_W32API */
248 #define NULL ((void*)0)
249 #endif /* __cplusplus */
255 #define CONTEXT_CONTROL 1L
256 #define CONTEXT_FLOATING_POINT 2L
257 #define CONTEXT_INTEGER 4L
258 #define CONTEXT_DEBUG_REGISTERS 8L
260 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
261 #define CONTEXT_DEBUGGER (CONTEXT_FULL)
265 #define SIZE_OF_80387_REGISTERS 80
267 /* Values for contextflags */
268 #define CONTEXT_i386 0x10000
272 #define CONTEXT_CONTROL (CONTEXT_i386 | 1)
273 #define CONTEXT_INTEGER (CONTEXT_i386 | 2)
274 #define CONTEXT_SEGMENTS (CONTEXT_i386 | 4)
275 #define CONTEXT_FLOATING_POINT (CONTEXT_i386 | 8)
276 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x10)
277 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
279 #endif /* !__USE_W32API */
281 /* our own invention */
282 #define FLAG_TRACE_BIT 0x100
283 #define CONTEXT_DEBUGGER (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
287 typedef struct _CONTEXT_X86
298 FLOATING_SAVE_AREA FloatSave;
318 } CONTEXT_X86, *PCONTEXT_X86, *LPCONTEXT_X86;
320 typedef struct _CONTEXT_PPC
322 /* Floating point registers returned when CONTEXT_FLOATING_POINT is set */
357 /* Integer registers returned when CONTEXT_INTEGER is set. */
391 DWORD Cr; /* Condition register */
392 DWORD Xer; /* Fixed point exception register */
394 /* The following are set when CONTEXT_CONTROL is set. */
395 DWORD Msr; /* Machine status register */
396 DWORD Iar; /* Instruction address register */
397 DWORD Lr; /* Link register */
398 DWORD Ctr; /* Control register */
400 /* Control which context values are returned */
404 /* Registers returned if CONTEXT_DEBUG_REGISTERS is set. */
405 DWORD Dr0; /* Breakpoint Register 1 */
406 DWORD Dr1; /* Breakpoint Register 2 */
407 DWORD Dr2; /* Breakpoint Register 3 */
408 DWORD Dr3; /* Breakpoint Register 4 */
409 DWORD Dr4; /* Breakpoint Register 5 */
410 DWORD Dr5; /* Breakpoint Register 6 */
411 DWORD Dr6; /* Debug Status Register */
412 DWORD Dr7; /* Debug Control Register */
413 } CONTEXT_PPC, *PCONTEXT_PPC, *LPCONTEXT_PPC;
415 typedef struct value_ent
421 } WVALENT, *PWVALENT;
423 //#include "except.h"
427 typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE;
431 typedef CONTEXT_X86 CONTEXT;
432 typedef PCONTEXT_X86 PCONTEXT;
433 typedef LPCONTEXT_X86 LPCONTEXT;
437 typedef CONTEXT_PPC CONTEXT;
438 typedef PCONTEXT_PPC PCONTEXT;
439 typedef LPCONTEXT_PPC LPCONTEXT;
445 typedef struct _COORD
451 typedef struct _SMALL_RECT
457 } SMALL_RECT, *PSMALL_RECT;
463 LPVOID lpArgToCompletionRoutine,
464 DWORD dwTimerLowValue,
465 DWORD dwTimerHighValue
469 (STDCALL *PTIMERAPCROUTINE)(
470 LPVOID lpArgToCompletionRoutine,
471 DWORD dwTimerLowValue,
472 DWORD dwTimerHighValue
478 #else /* __USE_W32API */
480 typedef LPTHREAD_START_ROUTINE PTHREAD_START_ROUTINE;
482 #include <ddk/ntapi.h>
484 #endif /* __USE_W32API */
486 #endif /* __INCLUDE_TYPES_H */