bootstrap
[reactos.git] / include / ntos / types.h
1 /*
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)
9  * UPDATE HISTORY:
10  *               27/06/00: Created
11  *               01/05/01: Portabillity changes
12  */
13
14 #ifndef __INCLUDE_TYPES_H
15 #define __INCLUDE_TYPES_H
16
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;
26
27 typedef signed long int     LONG32, *PLONG32;
28 typedef unsigned long int   ULONG32, *PULONG32;
29 typedef unsigned long int   DWORD32, *PDWORD32;
30
31
32 #ifdef _WIN64
33
34 /* 64-bit architecture */
35
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;
41
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;
50
51 #else /* _WIN64 */
52
53 /* 32-bit architecture */
54
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;
60
61
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;
70
71 #endif /* _WIN64 */
72
73 typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR;
74
75 typedef long long LONG64, *PLONG64;
76
77 typedef unsigned long long ULONG64, *PULONG64;
78 typedef unsigned long long DWORD64, *PDWORD64;
79
80
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;
86 typedef int BOOL;
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;
93 typedef void *PVOID;
94 typedef unsigned char BYTE;
95 typedef void *LPVOID;
96 typedef float *PFLOAT;
97 typedef unsigned short *PWCH;
98 typedef unsigned short *PWORD;
99
100 typedef long long LONGLONG;
101 typedef unsigned long long ULONGLONG;
102 typedef long long *PLONGLONG;
103 typedef unsigned long long *PULONGLONG;
104
105 /* Check VOID before defining CHAR, SHORT */
106 #ifndef VOID
107 #define VOID void
108 typedef char CHAR;
109 typedef short SHORT;
110 #endif
111
112 typedef CHAR *PCHAR;
113 typedef CHAR *PCH;
114 typedef void *HANDLE;
115 typedef char CCHAR;
116 typedef CCHAR *PCCHAR;
117
118
119 #ifndef FALSE
120 #define FALSE 0
121 #endif
122 #ifndef TRUE
123 #define TRUE 1
124 #endif
125
126 #ifndef NULL
127 #ifdef __cplusplus
128 #define NULL 0
129 #else
130 #define NULL ((void*)0)
131 #endif /* __cplusplus */
132 #endif /* NULL */
133
134 typedef const unsigned short *PCWSTR;
135
136 typedef const char* PCSZ;
137
138 typedef union _LARGE_INTEGER
139 {
140   struct
141   {
142     DWORD LowPart;
143     LONG  HighPart;
144   } u;
145 #ifdef ANONYMOUSUNIONS
146   struct
147   {
148     DWORD LowPart;
149     LONG  HighPart;
150   };
151 #endif /* ANONYMOUSUNIONS */
152   LONGLONG QuadPart;
153 } LARGE_INTEGER, *PLARGE_INTEGER;
154
155 typedef union _ULARGE_INTEGER
156 {
157   struct
158   {
159     DWORD LowPart;
160     DWORD HighPart;
161   } u;
162 #ifdef ANONYMOUSUNIONS
163   struct
164   {
165     DWORD LowPart;
166     DWORD HighPart;
167   };
168 #endif /* ANONYMOUSUNIONS */
169   ULONGLONG QuadPart;
170 } ULARGE_INTEGER, *PULARGE_INTEGER;
171
172 typedef struct _FILETIME
173 {
174    DWORD dwLowDateTime;
175    DWORD dwHighDateTime;
176 } FILETIME, *LPFILETIME, *PFILETIME;
177
178 #define CONST const
179
180 #ifdef i386
181 #define STDCALL     __attribute__ ((stdcall))
182 #define CDECL       __attribute((cdecl))
183 #define CALLBACK    WINAPI
184 #define PASCAL      WINAPI
185 #else
186 #define STDCALL
187 #define CDECL
188 #define CALLBACK
189 #define PASCAL
190 #endif
191
192 typedef struct _LIST_ENTRY {
193   struct _LIST_ENTRY *Flink;
194   struct _LIST_ENTRY *Blink;
195 } LIST_ENTRY, *PLIST_ENTRY;
196
197 typedef struct _SINGLE_LIST_ENTRY {
198   struct _SINGLE_LIST_ENTRY *Next;
199 } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
200
201 typedef DWORD STDCALL (*PTHREAD_START_ROUTINE) (LPVOID);
202 typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE;
203
204 typedef unsigned short *PWCHAR;
205
206 #ifdef __PPC__
207 #define CONTEXT_CONTROL         1L
208 #define CONTEXT_FLOATING_POINT  2L
209 #define CONTEXT_INTEGER         4L
210 #define CONTEXT_DEBUG_REGISTERS 8L
211
212 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
213 #define CONTEXT_DEBUGGER (CONTEXT_FULL)
214
215 #else /* x86 */
216 /* The doc refered me to winnt.h, so I had to look... */
217 #define SIZE_OF_80387_REGISTERS      80
218
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)
227
228 /* our own invention */
229 #define FLAG_TRACE_BIT 0x100
230 #define CONTEXT_DEBUGGER (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
231
232 #endif
233
234 typedef struct _FLOATING_SAVE_AREA {
235     DWORD   ControlWord;
236     DWORD   StatusWord;
237     DWORD   TagWord;
238     DWORD   ErrorOffset;
239     DWORD   ErrorSelector;
240     DWORD   DataOffset;
241     DWORD   DataSelector;
242     BYTE    RegisterArea[80];
243     DWORD   Cr0NpxState;
244 } FLOATING_SAVE_AREA;
245
246 typedef struct _CONTEXT_X86 {
247     DWORD ContextFlags;
248
249     DWORD   Dr0;
250     DWORD   Dr1;
251     DWORD   Dr2;
252     DWORD   Dr3;
253     DWORD   Dr6;
254     DWORD   Dr7;
255
256     FLOATING_SAVE_AREA FloatSave;
257
258     DWORD   SegGs;
259     DWORD   SegFs;
260     DWORD   SegEs;
261     DWORD   SegDs;
262
263     DWORD   Edi;
264     DWORD   Esi;
265     DWORD   Ebx;
266     DWORD   Edx;
267     DWORD   Ecx;
268     DWORD   Eax;
269
270     DWORD   Ebp;
271     DWORD   Eip;
272     DWORD   SegCs;
273     DWORD   EFlags;
274     DWORD   Esp;
275     DWORD   SegSs;
276 } CONTEXT_X86, *PCONTEXT_X86, *LPCONTEXT_X86;
277
278 typedef struct _CONTEXT_PPC
279   {
280     /* Floating point registers returned when CONTEXT_FLOATING_POINT is set */
281     double Fpr0;
282     double Fpr1;
283     double Fpr2;
284     double Fpr3;
285     double Fpr4;
286     double Fpr5;
287     double Fpr6;
288     double Fpr7;
289     double Fpr8;
290     double Fpr9;
291     double Fpr10;
292     double Fpr11;
293     double Fpr12;
294     double Fpr13;
295     double Fpr14;
296     double Fpr15;
297     double Fpr16;
298     double Fpr17;
299     double Fpr18;
300     double Fpr19;
301     double Fpr20;
302     double Fpr21;
303     double Fpr22;
304     double Fpr23;
305     double Fpr24;
306     double Fpr25;
307     double Fpr26;
308     double Fpr27;
309     double Fpr28;
310     double Fpr29;
311     double Fpr30;
312     double Fpr31;
313     double Fpscr;
314
315     /* Integer registers returned when CONTEXT_INTEGER is set.  */
316     DWORD Gpr0;
317     DWORD Gpr1;
318     DWORD Gpr2;
319     DWORD Gpr3;
320     DWORD Gpr4;
321     DWORD Gpr5;
322     DWORD Gpr6;
323     DWORD Gpr7;
324     DWORD Gpr8;
325     DWORD Gpr9;
326     DWORD Gpr10;
327     DWORD Gpr11;
328     DWORD Gpr12;
329     DWORD Gpr13;
330     DWORD Gpr14;
331     DWORD Gpr15;
332     DWORD Gpr16;
333     DWORD Gpr17;
334     DWORD Gpr18;
335     DWORD Gpr19;
336     DWORD Gpr20;
337     DWORD Gpr21;
338     DWORD Gpr22;
339     DWORD Gpr23;
340     DWORD Gpr24;
341     DWORD Gpr25;
342     DWORD Gpr26;
343     DWORD Gpr27;
344     DWORD Gpr28;
345     DWORD Gpr29;
346     DWORD Gpr30;
347     DWORD Gpr31;
348
349     DWORD Cr;                   /* Condition register */
350     DWORD Xer;                  /* Fixed point exception register */
351
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 */
357
358     /* Control which context values are returned */
359     DWORD ContextFlags;
360     DWORD Fill[3];
361
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;
372
373 #ifdef __i386__
374
375 typedef CONTEXT_X86 CONTEXT;
376 typedef PCONTEXT_X86 PCONTEXT;
377 typedef LPCONTEXT_X86 LPCONTEXT;
378
379 #else /* __ppc__ */
380
381 typedef CONTEXT_PPC CONTEXT;
382 typedef PCONTEXT_PPC PCONTEXT;
383 typedef LPCONTEXT_PPC LPCONTEXT;
384
385 #endif
386
387 typedef HANDLE *PHANDLE;
388
389 typedef struct value_ent {
390     LPWSTR ve_valuename;
391     DWORD  ve_valuelen;
392     DWORD  ve_valueptr;
393     DWORD  ve_type;
394 } WVALENT, *PWVALENT;
395
396
397 typedef const void *LPCVOID;
398 typedef BYTE *LPBYTE, *PBYTE;
399
400 typedef BOOL *PBOOL;
401
402 typedef DWORD LCID;
403 typedef DWORD *PLCID;
404
405 typedef const char *LPCSTR;
406
407 typedef char *LPSTR;
408
409 typedef const unsigned short *LPCWSTR;
410
411 typedef unsigned short RTL_ATOM;
412 typedef unsigned short *PRTL_ATOM;
413 typedef WORD ATOM;
414
415 typedef struct _COORD {
416   SHORT X;
417   SHORT Y;
418 } COORD;
419
420 typedef struct _SMALL_RECT {
421   SHORT Left;
422   SHORT Top;
423   SHORT Right;
424   SHORT Bottom;
425 } SMALL_RECT, *PSMALL_RECT;
426
427
428 typedef VOID STDCALL
429 (*PTIMERAPCROUTINE)(
430         LPVOID lpArgToCompletionRoutine,
431         DWORD dwTimerLowValue,
432         DWORD dwTimerHighValue
433         );
434
435 #include "except.h"
436
437 #endif /* __INCLUDE_TYPES_H */