Remove all non-official LPC structures/defines/hardcoded hacks, and use actual correc...
[reactos.git] / reactos / include / reactos / helper.h
1 #ifndef _HELPER_H
2 #define _HELPER_H
3
4 /* FIXME: clean this mess up and move to NDK */
5 #define ROUNDUP(a,b) ((((a)+(b)-1)/(b))*(b))
6 #define ROUNDDOWN(a,b) (((a)/(b))*(b))
7 #define ROUND_UP ROUNDUP
8 #define ROUND_DOWN ROUNDDOWN
9 #define PAGE_ROUND_DOWN(x) (((ULONG)x)&(~(PAGE_SIZE-1)))
10 #define PAGE_ROUND_UP(x) ( (((ULONG)x)%PAGE_SIZE) ? ((((ULONG)x)&(~(PAGE_SIZE-1)))+PAGE_SIZE) : ((ULONG)x) )
11 #define ABS_VALUE(V) (((V) < 0) ? -(V) : (V))
12 #define RtlRosMin(X,Y) (((X) < (Y))? (X) : (Y))
13 #define RtlRosMin3(X,Y,Z) (((X) < (Y)) ? RtlRosMin(X,Z) : RtlRosMin(Y,Z))
14 #define KEBUGCHECKEX(a,b,c,d,e) DbgPrint("KeBugCheckEx at %s:%i\n",__FILE__,__LINE__), KeBugCheckEx(a,b,c,d,e)
15 #define KEBUGCHECK(a) DbgPrint("KeBugCheck at %s:%i\n",__FILE__,__LINE__), KeBugCheck(a)
16 #define EXPORTED __declspec(dllexport)
17 #define IMPORTED __declspec(dllimport)
18 #define LIST_FOR_EACH(entry, head) \
19 for(entry = (head)->Flink; entry != (head); entry = entry->Flink)
20 #define LIST_FOR_EACH_SAFE(tmp_entry, head, ptr, type, field) \
21 for ((tmp_entry)=(head)->Flink; (tmp_entry)!=(head) && \
22 ((ptr) = CONTAINING_RECORD(tmp_entry,type,field)) && \
23 ((tmp_entry) = (tmp_entry)->Flink); )
24 #define OPTHDROFFSET(a) ((LPVOID)((BYTE *)a + \
25 ((PIMAGE_DOS_HEADER)a)->e_lfanew + \
26 sizeof (IMAGE_NT_SIGNATURE) + \
27 sizeof (IMAGE_FILE_HEADER)))
28 #define TAG(A, B, C, D) (ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24))
29 #define RVA(m, b) ((PVOID)((ULONG_PTR)(b) + (ULONG_PTR)(m)))
30 #define NTSTAT_SEVERITY_SHIFT 30
31 #define NTSTAT_SEVERITY_MASK 0x00000003
32 #define NTSTAT_FACILITY_SHIFT 16
33 #define NTSTAT_FACILITY_MASK 0x00000FFF
34 #define NTSTAT_CUSTOMER_MASK 0x20000000
35 #define NT_SEVERITY(StatCode) (((StatCode) >> NTSTAT_SEVERITY_SHIFT) & NTSTAT_SEVERITY_MASK)
36 #define NT_FACILITY(StatCode) (((StatCode) >> NTSTAT_FACILITY_SHIFT) & NTSTAT_FACILITY_MASK)
37 #define NT_CUSTOMER(StatCode) ((StatCode) & NTSTAT_CUSTOMER_MASK)
38 #define RELATIVE_TIME(wait) (-(wait))
39 #define NANOS_TO_100NS(nanos) (((LONGLONG)(nanos)) / 100)
40 #define MICROS_TO_100NS(micros) (((LONGLONG)(micros)) * NANOS_TO_100NS(1000))
41 #define MILLIS_TO_100NS(milli) (((LONGLONG)(milli)) * MICROS_TO_100NS(1000))
42 #define SECONDS_TO_100NS(seconds) (((LONGLONG)(seconds)) * MILLIS_TO_100NS(1000))
43 #define MINUTES_TO_100NS(minutes) (((LONGLONG)(minutes)) * SECONDS_TO_100NS(60))
44 #define HOURS_TO_100NS(hours) (((LONGLONG)(hours)) * MINUTES_TO_100NS(60))
45 #define UNICODIZE1(x) L##x
46 #define UNICODIZE(x) UNICODIZE1(x)
47 #define InsertAscendingListFIFO(ListHead, Type, ListEntryField, NewEntry, SortField)\
48 {\
49 PLIST_ENTRY current;\
50 \
51 current = (ListHead)->Flink;\
52 while (current != (ListHead))\
53 {\
54 if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField >\
55 (NewEntry)->SortField)\
56 {\
57 break;\
58 }\
59 current = current->Flink;\
60 }\
61 \
62 InsertTailList(current, &((NewEntry)->ListEntryField));\
63 }
64
65 #define InsertDescendingListFIFO(ListHead, Type, ListEntryField, NewEntry, SortField)\
66 {\
67 PLIST_ENTRY current;\
68 \
69 current = (ListHead)->Flink;\
70 while (current != (ListHead))\
71 {\
72 if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField <\
73 (NewEntry)->SortField)\
74 {\
75 break;\
76 }\
77 current = current->Flink;\
78 }\
79 \
80 InsertTailList(current, &((NewEntry)->ListEntryField));\
81 }
82
83 #define InsertAscendingList(ListHead, Type, ListEntryField, NewEntry, SortField)\
84 {\
85 PLIST_ENTRY current;\
86 \
87 current = (ListHead)->Flink;\
88 while (current != (ListHead))\
89 {\
90 if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField >=\
91 (NewEntry)->SortField)\
92 {\
93 break;\
94 }\
95 current = current->Flink;\
96 }\
97 \
98 InsertTailList(current, &((NewEntry)->ListEntryField));\
99 }
100
101 #define InsertDescendingList(ListHead, Type, ListEntryField, NewEntry, SortField)\
102 {\
103 PLIST_ENTRY current;\
104 \
105 current = (ListHead)->Flink;\
106 while (current != (ListHead))\
107 {\
108 if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField <=\
109 (NewEntry)->SortField)\
110 {\
111 break;\
112 }\
113 current = current->Flink;\
114 }\
115 \
116 InsertTailList(current, &((NewEntry)->ListEntryField));\
117 }
118
119 #endif