Change widl to use only host headers.
[reactos.git] / reactos / include / host / typedefs.h
1 /*
2 PROJECT: ReactOS
3 LICENSE: GPL v2 or any later version
4 FILE: include/host/typedefs.h
5 PURPOSE: Type definitions and useful macros for host tools
6 COPYRIGHT: Copyright 2007 Hervé Poussineau
7 Copyright 2007 Colin Finck <mail@colinfinck.de>
8 */
9
10 #ifndef _TYPEDEFS_HOST_H
11 #define _TYPEDEFS_HOST_H
12
13 #include <assert.h>
14 #include <stdlib.h>
15 #include <limits.h>
16
17 #if defined(_MSC_VER)
18 #define W64 __w64
19 #elif defined(__GNUC__)
20 #define W64
21 #else
22 #error Unknown compiler
23 #endif
24
25 /* Function attributes for GCC */
26 #if !defined(_MSC_VER) && !defined(__fastcall)
27 #define __fastcall __attribute__((fastcall))
28 #endif
29 #if !defined(_MSC_VER) && !defined(__cdecl)
30 #define __cdecl __attribute__((cdecl))
31 #endif
32 #if !defined(_MSC_VER) && !defined(__stdcall)
33 #define __stdcall __attribute__((stdcall))
34 #endif
35
36 /* Basic definitions */
37 #define UNIMPLEMENTED { printf("%s unimplemented\n", __FUNCTION__); exit(1); }
38 #define ASSERT(x) assert(x)
39 #define ASSERTMSG(x, m) assert(x)
40 #define DPRINT if (0) printf
41 #define DPRINT1 printf
42
43 #define NTAPI
44 #define WINAPI
45
46 #define IN
47 #define OUT
48 #define OPTIONAL
49
50 #define FALSE 0
51 #define TRUE (!(FALSE))
52
53 /* FIXME: this value is target specific, host tools MUST not use it
54 * and this line has to be removed */
55 #define PAGE_SIZE 4096
56
57 #define ANYSIZE_ARRAY 1
58
59 /* Type definitions */
60 typedef void VOID, *PVOID, *HANDLE;
61 typedef HANDLE HKEY, *PHKEY;
62 typedef unsigned char UCHAR, *PUCHAR, BYTE, *LPBYTE;
63 typedef char CHAR, *PCHAR, *PSTR;
64 typedef const char CCHAR;
65 typedef const char *PCSTR, *LPCSTR;
66 typedef short SHORT, *PSHORT;
67 typedef unsigned short USHORT, *PUSHORT;
68 typedef unsigned short WORD, *PWORD, *LPWORD;
69 typedef int LONG, *PLONG, *LPLONG;
70 typedef unsigned int ULONG, *PULONG, DWORD, *LPDWORD;
71 typedef long long LONGLONG;
72 typedef unsigned long long ULONGLONG;
73 typedef int INT;
74 typedef unsigned int UINT, *PUINT, *LPUINT;
75 typedef UCHAR BOOLEAN, *PBOOLEAN;
76 typedef int BOOL;
77 typedef long int W64 LONG_PTR, *PLONG_PTR;
78 typedef long unsigned int W64 ULONG_PTR, DWORD_PTR, *PULONG_PTR;
79 typedef ULONG_PTR SIZE_T, *PSIZE_T;
80 typedef unsigned short WCHAR, *PWCHAR, *PWSTR, *LPWSTR;
81 typedef const unsigned short *PCWSTR, *LPCWSTR;
82 typedef int NTSTATUS;
83 typedef int POOL_TYPE;
84 typedef LONG HRESULT;
85
86 #define MAXUSHORT USHRT_MAX
87
88 /* Widely used structures */
89 #include <host/pshpack4.h>
90 typedef struct _RTL_BITMAP
91 {
92 ULONG SizeOfBitMap;
93 PULONG Buffer;
94 } RTL_BITMAP, *PRTL_BITMAP;
95
96 typedef struct _RTL_BITMAP_RUN
97 {
98 ULONG StartingIndex;
99 ULONG NumberOfBits;
100 } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
101
102 typedef union _LARGE_INTEGER
103 {
104 struct
105 {
106 DWORD LowPart;
107 LONG HighPart;
108 };
109 LONGLONG QuadPart;
110 } LARGE_INTEGER, *PLARGE_INTEGER;
111
112 typedef struct _LIST_ENTRY
113 {
114 struct _LIST_ENTRY *Flink;
115 struct _LIST_ENTRY *Blink;
116 } LIST_ENTRY,*PLIST_ENTRY;
117
118 typedef struct _ANSI_STRING
119 {
120 USHORT Length;
121 USHORT MaximumLength;
122 PSTR Buffer;
123 } ANSI_STRING, *PANSI_STRING;
124
125 typedef struct _UNICODE_STRING
126 {
127 USHORT Length;
128 USHORT MaximumLength;
129 PWSTR Buffer;
130 } UNICODE_STRING, *PUNICODE_STRING;
131 #include <host/poppack.h>
132
133 /* List Functions */
134 static __inline
135 VOID
136 InitializeListHead(
137 IN PLIST_ENTRY ListHead
138 )
139 {
140 ListHead->Flink = ListHead->Blink = ListHead;
141 }
142
143 static __inline
144 VOID
145 InsertHeadList(
146 IN PLIST_ENTRY ListHead,
147 IN PLIST_ENTRY Entry
148 )
149 {
150 PLIST_ENTRY OldFlink;
151 OldFlink = ListHead->Flink;
152 Entry->Flink = OldFlink;
153 Entry->Blink = ListHead;
154 OldFlink->Blink = Entry;
155 ListHead->Flink = Entry;
156 }
157
158 static __inline
159 VOID
160 InsertTailList(
161 IN PLIST_ENTRY ListHead,
162 IN PLIST_ENTRY Entry
163 )
164 {
165 PLIST_ENTRY OldBlink;
166 OldBlink = ListHead->Blink;
167 Entry->Flink = ListHead;
168 Entry->Blink = OldBlink;
169 OldBlink->Flink = Entry;
170 ListHead->Blink = Entry;
171 }
172
173 BOOLEAN
174 static __inline
175 IsListEmpty(
176 IN const LIST_ENTRY * ListHead
177 )
178 {
179 return (BOOLEAN)(ListHead->Flink == ListHead);
180 }
181
182 static __inline
183 BOOLEAN
184 RemoveEntryList(
185 IN PLIST_ENTRY Entry)
186 {
187 PLIST_ENTRY OldFlink;
188 PLIST_ENTRY OldBlink;
189
190 OldFlink = Entry->Flink;
191 OldBlink = Entry->Blink;
192 OldFlink->Blink = OldBlink;
193 OldBlink->Flink = OldFlink;
194 return (BOOLEAN)(OldFlink == OldBlink);
195 }
196
197 static __inline
198 PLIST_ENTRY
199 RemoveHeadList(
200 IN PLIST_ENTRY ListHead)
201 {
202 PLIST_ENTRY Flink;
203 PLIST_ENTRY Entry;
204
205 Entry = ListHead->Flink;
206 Flink = Entry->Flink;
207 ListHead->Flink = Flink;
208 Flink->Blink = ListHead;
209 return Entry;
210 }
211
212 static __inline
213 PLIST_ENTRY
214 RemoveTailList(
215 IN PLIST_ENTRY ListHead)
216 {
217 PLIST_ENTRY Blink;
218 PLIST_ENTRY Entry;
219
220 Entry = ListHead->Blink;
221 Blink = Entry->Blink;
222 ListHead->Blink = Blink;
223 Blink->Flink = ListHead;
224 return Entry;
225 }
226
227 typedef const UNICODE_STRING *PCUNICODE_STRING;
228
229 /* Widely used macros */
230 #define min(a, b) ((a) < (b) ? (a) : (b))
231 #define max(a,b) ((a) < (b) ? (b) : (a))
232
233 #define LOBYTE(w) ((BYTE)(w))
234 #define HIBYTE(w) ((BYTE)(((WORD)(w)>>8)&0xFF))
235 #define LOWORD(l) ((WORD)((DWORD_PTR)(l)))
236 #define HIWORD(l) ((WORD)(((DWORD_PTR)(l)>>16)&0xFFFF))
237 #define MAKEWORD(a,b) ((WORD)(((BYTE)(a))|(((WORD)((BYTE)(b)))<<8)))
238 #define MAKELONG(a,b) ((LONG)(((WORD)(a))|(((DWORD)((WORD)(b)))<<16)))
239
240 #define NT_SUCCESS(x) ((x)>=0)
241 #define FIELD_OFFSET(t,f) ((LONG_PTR)&(((t*)0)->f))
242 #define RTL_CONSTANT_STRING(s) { sizeof(s)-sizeof((s)[0]), sizeof(s), s }
243 #define CONTAINING_RECORD(address, type, field) ((type *)(((ULONG_PTR)address) - (ULONG_PTR)(&(((type *)0)->field))))
244
245 #define RtlZeroMemory(Destination, Length) memset(Destination, 0, Length)
246 #define RtlCopyMemory(Destination, Source, Length) memcpy(Destination, Source, Length)
247 #define RtlMoveMemory(Destination, Source, Length) memmove(Destination, Source, Length)
248
249 /* Prevent inclusion of some other headers */
250 #define __INTERNAL_DEBUG
251 #define RTL_H
252
253 #endif