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