branch update for HEAD-2003021201
[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 #include <basetsd.h>
18
19 #ifdef __GNUC__
20 #define STDCALL_FUNC STDCALL
21 #else
22 #define STDCALL_FUNC(a) (__stdcall a )
23 #endif /*__GNUC__*/
24
25 /* Fixed precision types */
26 typedef signed char         INT8, *PINT8;
27 typedef signed short        INT16, *PINT16;
28
29 typedef unsigned char       UINT8, *PUINT8;
30 typedef unsigned short      UINT16, *PUINT16;
31
32
33 /* Check VOID before defining CHAR, SHORT */
34 #ifndef VOID
35 #define VOID void
36 typedef char CHAR;
37 typedef short SHORT;
38 #endif
39
40
41 #ifndef __USE_W32API
42
43 #ifdef i386
44 #ifndef STDCALL
45 #define STDCALL     __attribute__ ((stdcall))
46 #endif
47 #ifndef CDECL
48 #define CDECL       __attribute((cdecl))
49 #endif
50 #define CALLBACK    WINAPI
51 #define PASCAL      WINAPI
52 #else
53 #ifndef STDCALL
54 #define STDCALL
55 #endif
56 #ifndef CDECL
57 #define CDECL
58 #endif
59 #define CALLBACK
60 #define PASCAL
61 #endif
62
63 #ifdef _WIN64
64
65 /* 64-bit architecture */
66
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;
72
73 #else /* _WIN64 */
74
75 /* 32-bit architecture */
76
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;
82
83 #endif /* _WIN64 */
84
85 #ifndef _WCHAR_T_
86 #define _WCHAR_T_
87 #define _WCHAR_T
88 #define _WCHAR_T_DEFINED
89 #ifndef __WCHAR_TYPE__
90 #define __WCHAR_TYPE__      short unsigned int
91 #endif
92
93 #ifndef __cplusplus
94 typedef __WCHAR_TYPE__      wchar_t;
95 #endif  /* C++ */
96
97 #endif  /* wchar_t not already defined */
98
99
100 //#ifndef __cplusplus
101 //#ifndef _WCHAR_T_DEFINED
102 //#define _WCHAR_T_DEFINED
103 //typedef unsigned short wchar_t;
104 //#endif
105 //#endif
106
107 typedef unsigned char UCHAR;
108 typedef unsigned short USHORT;
109 typedef wchar_t WCHAR;
110 typedef unsigned short WORD;
111 typedef int BOOL;
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;
118 typedef void *PVOID;
119 typedef unsigned char BYTE;
120 typedef void *LPVOID;
121 typedef float *PFLOAT;
122 typedef wchar_t *PWCH;
123 typedef unsigned short *PWORD;
124
125 #include <msvcrt/crttypes.h> // for definition of LONGLONG, PLONGLONG etc
126
127 typedef const void *LPCVOID;
128 typedef BYTE *LPBYTE, *PBYTE;
129 typedef BOOL *PBOOL;
130 typedef DWORD LCID;
131 typedef DWORD *PLCID;
132 typedef const char *LPCSTR;
133 typedef char *LPSTR;
134 typedef const wchar_t *LPCWSTR;
135 typedef CHAR *PCHAR;
136 typedef CHAR *PCH;
137 typedef void *HANDLE;
138 typedef HANDLE *PHANDLE;
139 typedef char CCHAR;
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;
146
147 #ifdef __GNUC__
148 typedef DWORD STDCALL (*PTHREAD_START_ROUTINE) (LPVOID);
149 #else
150 typedef DWORD (STDCALL *PTHREAD_START_ROUTINE) (LPVOID);
151 #endif /*__GNUC__*/
152
153 typedef union _LARGE_INTEGER
154 {
155   struct
156   {
157     DWORD LowPart;
158     LONG  HighPart;
159   } u;
160 #ifdef ANONYMOUSUNIONS
161   struct
162   {
163     DWORD LowPart;
164     LONG  HighPart;
165   };
166 #endif /* ANONYMOUSUNIONS */
167   LONGLONG QuadPart;
168 } LARGE_INTEGER, *PLARGE_INTEGER;
169
170 typedef union _ULARGE_INTEGER
171 {
172   struct
173   {
174     DWORD LowPart;
175     DWORD HighPart;
176   } u;
177 #ifdef ANONYMOUSUNIONS
178   struct
179   {
180     DWORD LowPart;
181     DWORD HighPart;
182   };
183 #endif /* ANONYMOUSUNIONS */
184   ULONGLONG QuadPart;
185 } ULARGE_INTEGER, *PULARGE_INTEGER;
186
187 typedef struct _FILETIME
188 {
189   DWORD dwLowDateTime;
190   DWORD dwHighDateTime;
191 } FILETIME, *LPFILETIME, *PFILETIME;
192
193 typedef struct _LIST_ENTRY
194 {
195   struct _LIST_ENTRY *Flink;
196   struct _LIST_ENTRY *Blink;
197 } LIST_ENTRY, *PLIST_ENTRY;
198
199 typedef struct _SINGLE_LIST_ENTRY
200 {
201   struct _SINGLE_LIST_ENTRY *Next;
202 } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
203
204 #define SLIST_ENTRY SINGLE_LIST_ENTRY
205 #define _SLIST_ENTRY _SINGLE_LIST_ENTRY
206 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
207
208 typedef struct _UNICODE_STRING
209 {
210   USHORT Length;
211   USHORT MaximumLength;
212   PWSTR Buffer;
213 } UNICODE_STRING, *PUNICODE_STRING;
214
215 typedef struct _FLOATING_SAVE_AREA
216 {
217   DWORD   ControlWord;
218   DWORD   StatusWord;
219   DWORD   TagWord;
220   DWORD   ErrorOffset;
221   DWORD   ErrorSelector;
222   DWORD   DataOffset;
223   DWORD   DataSelector;
224   BYTE    RegisterArea[80];
225   DWORD   Cr0NpxState;
226 } FLOATING_SAVE_AREA;
227
228 typedef unsigned short RTL_ATOM;
229 typedef unsigned short *PRTL_ATOM;
230
231 #else /* __USE_W32API */
232
233 #include <windows.h>
234
235 #endif /* __USE_W32API */
236
237 #ifndef FALSE
238 #define FALSE 0
239 #endif
240 #ifndef TRUE
241 #define TRUE 1
242 #endif
243
244 #ifndef NULL
245 #ifdef __cplusplus
246 #define NULL 0
247 #else
248 #define NULL ((void*)0)
249 #endif /* __cplusplus */
250 #endif /* NULL */
251
252 #define CONST const
253
254 #ifdef __PPC__
255 #define CONTEXT_CONTROL         1L
256 #define CONTEXT_FLOATING_POINT  2L
257 #define CONTEXT_INTEGER         4L
258 #define CONTEXT_DEBUG_REGISTERS 8L
259
260 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
261 #define CONTEXT_DEBUGGER (CONTEXT_FULL)
262
263 #else /* x86 */
264
265 #define SIZE_OF_80387_REGISTERS      80
266
267 /* Values for contextflags */
268 #define CONTEXT_i386    0x10000
269
270 #ifndef __USE_W32API
271
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)
278
279 #endif /* !__USE_W32API */
280
281 /* our own invention */
282 #define FLAG_TRACE_BIT 0x100
283 #define CONTEXT_DEBUGGER (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
284
285 #endif
286
287 typedef struct _CONTEXT_X86
288 {
289   DWORD ContextFlags;
290
291   DWORD   Dr0;
292   DWORD   Dr1;
293   DWORD   Dr2;
294   DWORD   Dr3;
295   DWORD   Dr6;
296   DWORD   Dr7;
297
298   FLOATING_SAVE_AREA FloatSave;
299
300   DWORD   SegGs;
301   DWORD   SegFs;
302   DWORD   SegEs;
303   DWORD   SegDs;
304
305   DWORD   Edi;
306   DWORD   Esi;
307   DWORD   Ebx;
308   DWORD   Edx;
309   DWORD   Ecx;
310   DWORD   Eax;
311
312   DWORD   Ebp;
313   DWORD   Eip;
314   DWORD   SegCs;
315   DWORD   EFlags;
316   DWORD   Esp;
317   DWORD   SegSs;
318 } CONTEXT_X86, *PCONTEXT_X86, *LPCONTEXT_X86;
319
320 typedef struct _CONTEXT_PPC
321 {
322   /* Floating point registers returned when CONTEXT_FLOATING_POINT is set */
323   double Fpr0;
324   double Fpr1;
325   double Fpr2;
326   double Fpr3;
327   double Fpr4;
328   double Fpr5;
329   double Fpr6;
330   double Fpr7;
331   double Fpr8;
332   double Fpr9;
333   double Fpr10;
334   double Fpr11;
335   double Fpr12;
336   double Fpr13;
337   double Fpr14;
338   double Fpr15;
339   double Fpr16;
340   double Fpr17;
341   double Fpr18;
342   double Fpr19;
343   double Fpr20;
344   double Fpr21;
345   double Fpr22;
346   double Fpr23;
347   double Fpr24;
348   double Fpr25;
349   double Fpr26;
350   double Fpr27;
351   double Fpr28;
352   double Fpr29;
353   double Fpr30;
354   double Fpr31;
355   double Fpscr;
356
357   /* Integer registers returned when CONTEXT_INTEGER is set. */
358   DWORD Gpr0;
359   DWORD Gpr1;
360   DWORD Gpr2;
361   DWORD Gpr3;
362   DWORD Gpr4;
363   DWORD Gpr5;
364   DWORD Gpr6;
365   DWORD Gpr7;
366   DWORD Gpr8;
367   DWORD Gpr9;
368   DWORD Gpr10;
369   DWORD Gpr11;
370   DWORD Gpr12;
371   DWORD Gpr13;
372   DWORD Gpr14;
373   DWORD Gpr15;
374   DWORD Gpr16;
375   DWORD Gpr17;
376   DWORD Gpr18;
377   DWORD Gpr19;
378   DWORD Gpr20;
379   DWORD Gpr21;
380   DWORD Gpr22;
381   DWORD Gpr23;
382   DWORD Gpr24;
383   DWORD Gpr25;
384   DWORD Gpr26;
385   DWORD Gpr27;
386   DWORD Gpr28;
387   DWORD Gpr29;
388   DWORD Gpr30;
389   DWORD Gpr31;
390
391   DWORD Cr;     /* Condition register */
392   DWORD Xer;    /* Fixed point exception register */
393
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 */
399
400   /* Control which context values are returned */
401   DWORD ContextFlags;
402   DWORD Fill[3];
403
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;
414
415 typedef struct value_ent
416 {
417   LPWSTR ve_valuename;
418   DWORD  ve_valuelen;
419   DWORD  ve_valueptr;
420   DWORD  ve_type;
421 } WVALENT, *PWVALENT;
422
423 //#include "except.h"
424
425 #ifndef __USE_W32API
426
427 typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE;
428
429 #ifdef __i386__
430
431 typedef CONTEXT_X86 CONTEXT;
432 typedef PCONTEXT_X86 PCONTEXT;
433 typedef LPCONTEXT_X86 LPCONTEXT;
434
435 #else /* __ppc__ */
436
437 typedef CONTEXT_PPC CONTEXT;
438 typedef PCONTEXT_PPC PCONTEXT;
439 typedef LPCONTEXT_PPC LPCONTEXT;
440
441 #endif
442
443 typedef WORD ATOM;
444
445 typedef struct _COORD
446 {
447   SHORT X;
448   SHORT Y;
449 } COORD;
450
451 typedef struct _SMALL_RECT
452 {
453   SHORT Left;
454   SHORT Top;
455   SHORT Right;
456   SHORT Bottom;
457 } SMALL_RECT, *PSMALL_RECT;
458
459
460 #ifdef __GNUC__
461 typedef VOID STDCALL
462 (*PTIMERAPCROUTINE)(
463         LPVOID lpArgToCompletionRoutine,
464         DWORD dwTimerLowValue,
465         DWORD dwTimerHighValue
466         );
467 #else
468 typedef VOID
469 (STDCALL *PTIMERAPCROUTINE)(
470         LPVOID lpArgToCompletionRoutine,
471         DWORD dwTimerLowValue,
472         DWORD dwTimerHighValue
473         );
474 #endif /*__GNUC__*/
475
476 #include "except.h"
477
478 #else /* __USE_W32API */
479
480 typedef LPTHREAD_START_ROUTINE PTHREAD_START_ROUTINE;
481
482 #include <ddk/ntapi.h>
483
484 #endif /* __USE_W32API */
485
486 #endif /* __INCLUDE_TYPES_H */