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