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