ReactOS  0.4.14-dev-115-g4576127
tools.h
Go to the documentation of this file.
1 /*++
2 
3 Copyright (c) 2002-2012 Alexandr A. Telyatnikov (Alter)
4 
5 Module Name:
6  tools.h
7 
8 Abstract:
9  This header contains some useful definitions for data manipulation.
10 
11 Author:
12  Alexander A. Telyatnikov (Alter)
13 
14 Environment:
15  kernel mode only
16 
17 Notes:
18 
19  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 
30 Revision History:
31 
32 Licence:
33  GPLv2
34 
35 --*/
36 
37 #ifndef __TOOLS_H__
38 #define __TOOLS_H__
39 
40 #pragma pack(push, 1)
41 
42 #ifdef __cplusplus
43 extern "C" {
44 #endif //__cplusplus
45 
46 //----------------
47 
48 #ifndef USER_MODE
49 #include <ntddk.h> // various NT definitions
50 #endif //USER_MODE
51 
52 //----------------
53 
54 #ifndef FOUR_BYTE_DEFINED
55 #define FOUR_BYTE_DEFINED
56 typedef struct _FOUR_BYTE {
57  UCHAR Byte0;
58  UCHAR Byte1;
59  UCHAR Byte2;
60  UCHAR Byte3;
62 #endif //FOUR_BYTE_DEFINED
63 
64 #ifdef _DEBUG
65 
66 #ifndef DBG
67 #define DBG
68 #endif // DBG
69 
70 #else // _DEBUG
71 
72 #ifdef DBG
73 #undef DBG
74 #endif // DBG
75 
76 #endif // _DEBUG
77 
78 // This macro has the effect of Bit = log2(Data)
79 
80 #define WHICH_BIT(Data, Bit) { \
81  for (Bit = 0; Bit < 32; Bit++) { \
82  if ((Data >> Bit) == 1) { \
83  break; \
84  } \
85  } \
86 }
87 
88 #define PAGE_MASK (PAGE_SIZE-1)
89 
90 #define ntohs(x) ( (((USHORT)x[0])<<8) | x[1] )
91 #define PLAY_ACTIVE(DeviceExtension) (((PCDROM_DATA)(DeviceExtension + 1))->PlayActive)
92 #define MSF_TO_LBA(Minutes,Seconds,Frames) \
93  (ULONG)((60 * 75 * (Minutes)) + (75 * (Seconds)) + ((Frames) - 150))
94 #define LBA_TO_MSF(Lba,Minutes,Seconds,Frames) \
95 { \
96  (Minutes) = (UCHAR)(Lba / (60 * 75)); \
97  (Seconds) = (UCHAR)((Lba % (60 * 75)) / 75); \
98  (Frames) = (UCHAR)((Lba % (60 * 75)) % 75); \
99 }
100 #define DEC_TO_BCD(x) (((x / 10) << 4) + (x % 10))
101 
102 
103 #ifdef DBG
104 
105 #define KdDump(a,b) \
106 if((a)!=NULL) { \
107  ULONG i; \
108  for(i=0; i<(b); i++) { \
109  ULONG c; \
110  c = (ULONG)(*(((PUCHAR)(a))+i)); \
111  KdPrint(("%2.2x ",c)); \
112  if ((i & 0x0f) == 0x0f) KdPrint(("\n")); \
113  } \
114  KdPrint(("\n")); \
115 }
116 
117 #define DbgDumpRegTranslation(chan, idx) \
118  KdPrint2((PRINT_PREFIX \
119  " IO_%#x (%#x), %s:\n", \
120  idx, \
121  chan->RegTranslation[idx].Addr, \
122  chan->RegTranslation[idx].Proc ? "Proc" : ( \
123  chan->RegTranslation[idx].MemIo ? "Mem" : "IO"))); \
124 
125 #define BrutePoint() { ASSERT(0); }
126 
127 #define DbgAllocatePool(x,y) ExAllocatePool(x,y)
128 #define DbgFreePool(x) ExFreePool(x)
129 #define DbgAllocatePoolWithTag(a,b,c) ExAllocatePoolWithTag(a,b,c)
130 
131 #else
132 
133 #define KdDump(a,b) {}
134 
135 #define DbgDumpRegTranslation(chan, idx) {}
136 
137 #define DbgAllocatePool(x,y) ExAllocatePool(x,y)
138 #define DbgFreePool(x) ExFreePool(x)
139 #define DbgAllocatePoolWithTag(a,b,c) ExAllocatePoolWithTag(a,b,c)
140 
141 #define BrutePoint() {}
142 
143 #endif //DBG
144 
145 
146 
147 #define WAIT_FOR_XXX_EMU_DELAY DEF_I64(5000000) // 0.5 s
148 
149 // neat little hacks to count number of bits set efficiently
151 { ULONG i = 0; while (_X) { _X &= _X - 1; i++; } return i; }
153 { ULONG i = 0; while (_X) { _X &= _X - 1; i++; } return i; }
154 
155 #ifndef max
156 #define max(a,b) (((a) > (b)) ? (a) : (b))
157 #endif //max
158 
159 #ifndef min
160 #define min(a,b) (((a) < (b)) ? (a) : (b))
161 #endif //min
162 //#define abs(a) (((a) < 0) ? (-(a)) : (a))
163 
164 /*
165 extern ULONG MajorVersion;
166 extern ULONG MinorVersion;
167 extern ULONG BuildNumber;
168 extern ULONG SPVersion;
169 */
170 
171 #ifdef __cplusplus
172 };
173 #endif //__cplusplus
174 
175 #ifndef USER_MODE
177 #endif //USER_MODE
178 
179 /*
180 #define WinVer_Is351 (MajorVersion==0x03)
181 #define WinVer_IsNT (MajorVersion==0x04)
182 #define WinVer_Is2k (MajorVersion==0x05 && MinorVersion==0x00)
183 #define WinVer_IsXP (MajorVersion==0x05 && MinorVersion==0x01)
184 #define WinVer_IsdNET (MajorVersion==0x05 && MinorVersion==0x02)
185 
186 #define WinVer_Id() ((MajorVersion << 8) | MinorVersion)
187 
188 #define WinVer_351 (0x0351)
189 #define WinVer_NT (0x0400)
190 #define WinVer_2k (0x0500)
191 #define WinVer_XP (0x0501)
192 #define WinVer_dNET (0x0502)
193 */
194 
195 #define PtrOffset(BASE,OFFSET) ((ULONG)((ULONG)(OFFSET) - (ULONG)(BASE)))
196 
197 #ifndef offsetof
198 #define offsetof(type, field) (ULONG)&(((type *)0)->field)
199 #endif //offsetof
200 
201 #pragma pack(pop)
202 
203 #endif // __TOOLS_H__
UCHAR Byte0
Definition: tools.h:16
struct _FOUR_BYTE * PFOUR_BYTE
UCHAR Byte3
Definition: tools.h:19
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
__inline ULONG CountOfSetBitsUChar(UCHAR _X)
Definition: tools.h:150
#define _X(x)
Definition: CString.cpp:158
__inline ULONG CountOfSetBitsULong(ULONG _X)
Definition: tools.h:152
unsigned char UCHAR
Definition: xmlstorage.h:181
UCHAR Byte1
Definition: tools.h:17
UNICODE_STRING SavedSPString
struct _FOUR_BYTE FOUR_BYTE
unsigned int ULONG
Definition: retypes.h:1
UCHAR Byte2
Definition: tools.h:18