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