1 /***********************************************************************\
2 *                               basetsd.d                               *
3 *                                                                       *
4 *                       Windows API header module                       *
5 *                                                                       *
6 *             Translated from MinGW API for MS-Windows 3.12             *
7 *                           by Stewart Gordon                           *
8 *                                                                       *
9 *                       Placed into public domain                       *
10 \***********************************************************************/
11 module win32.basetsd;
12 
13 /*	This template is used in these modules to declare constant pointer types,
14  *	in order to support both D 1.x and 2.x.
15  *	Since removed - now supporting only D2
16  */
17 /*template CPtr(T) {
18 	version (D_Version2) {
19 		// must use mixin so that it doesn't cause a syntax error under D1
20 		mixin("alias const(T)* CPtr;");
21 	} else {
22 		alias T* CPtr;
23 	}
24 }*/
25 
26 /*	[CyberShadow VP 2011.12.22] typedef is now deprecated in D2.
27  */
28 template TypeDef(T) {
29 	version (D_Version2) {
30 		alias T TypeDef;
31 	} else {
32 		// must use mixin so that it doesn't cause a deprecation error under D2
33 		mixin("typedef T TypeDef;");
34 	}
35 }
36 
37 // [SnakE 2009-02-23] Moved HANDLE definition here from winnt.d to avoid
38 // 'forwatd template reference' to CPtr from winnt.d caused by a circular
39 // import.
40 
41 alias TypeDef!(void*) HANDLE;
42 /+struct HANDLE {
43     const(void)* h;
44     alias h this;
45 }+/
46 
47 package template DECLARE_HANDLE(string name, base = HANDLE) {
48     mixin ("alias " ~ base.stringof ~ " " ~ name ~ ";");
49 }
50 alias HANDLE* PHANDLE, LPHANDLE;
51 
52 version (Win64) {
53 	alias long __int3264;
54 	const ulong ADDRESS_TAG_BIT = 0x40000000000;
55 
56 	alias long INT_PTR, LONG_PTR;
57 	alias long* PINT_PTR, PLONG_PTR;
58 	alias ulong UINT_PTR, ULONG_PTR, HANDLE_PTR;
59 	alias ulong* PUINT_PTR, PULONG_PTR;
60 	alias int HALF_PTR;
61 	alias int* PHALF_PTR;
62 	alias uint UHALF_PTR;
63 	alias uint* PUHALF_PTR;
64 
65 	uint HandleToULong(void* h) { return(cast(uint) cast(ULONG_PTR) h); }
66 	int HandleToLong(void* h)   { return(cast(int) cast(LONG_PTR) h); }
67 	void* ULongToHandle(uint h) { return(cast(void*) cast(UINT_PTR) h); }
68 	void* LongToHandle(int h)   { return(cast(void*) cast(INT_PTR) h); }
69 	uint PtrToUlong(void* p)    { return(cast(uint) cast(ULONG_PTR) p); }
70 	uint PtrToUint(void* p)     { return(cast(uint) cast(UINT_PTR) p); }
71 	ushort PtrToUshort(void* p) { return(cast(ushort) cast(uint) cast(ULONG_PTR) p); }
72 	int PtrToLong(void* p)      { return(cast(int) cast(LONG_PTR) p); }
73 	int PtrToInt(void* p)       { return(cast(int) cast(INT_PTR) p); }
74 	short PtrToShort(void* p)   { return(cast(short) cast(int) cast(LONG_PTR) p); }
75 	void* IntToPtr(int i)       { return(cast(void*) cast(INT_PTR) i); }
76 	void* UIntToPtr(uint ui)    { return(cast(void*) cast(UINT_PTR) ui); }
77 	void* LongToPtr(int l)      { return(cast(void*) cast(LONG_PTR) l); }
78 	void* ULongToPtr(uint ul)   { return(cast(void*) cast(ULONG_PTR) ul); }
79 
80 } else {
81 	alias int __int3264;
82 	const uint ADDRESS_TAG_BIT = 0x80000000;
83 
84 	alias int INT_PTR, LONG_PTR;
85 	alias int* PINT_PTR, PLONG_PTR;
86 	alias uint UINT_PTR, ULONG_PTR, HANDLE_PTR;
87 	alias uint* PUINT_PTR, PULONG_PTR;
88 	alias short HALF_PTR;
89 	alias short* PHALF_PTR;
90 	alias ushort UHALF_PTR;
91 	alias ushort* PUHALF_PTR;
92 
93 	uint HandleToUlong(HANDLE h)      { return cast(uint) h; }
94 	int HandleToLong(HANDLE h)        { return cast(int) h; }
95 	HANDLE LongToHandle(LONG_PTR h)   { return cast(HANDLE)h; }
96 	uint PtrToUlong(const(void)* p)    { return cast(uint) p; }
97 	uint PtrToUint(const(void)* p)     { return cast(uint) p; }
98 	int PtrToInt(const(void)* p)       { return cast(int) p; }
99 	ushort PtrToUshort(const(void)* p) { return cast(ushort) p; }
100 	short PtrToShort(const(void)* p)   { return cast(short) p; }
101 	void* IntToPtr(int i)             { return cast(void*) i; }
102 	void* UIntToPtr(uint ui)          { return cast(void*) ui; }
103 	alias IntToPtr LongToPtr;
104 	alias UIntToPtr ULongToPtr;
105 }
106 
107 alias UIntToPtr UintToPtr, UlongToPtr;
108 
109 enum : UINT_PTR {
110 	MAXUINT_PTR = UINT_PTR.max
111 }
112 
113 enum : INT_PTR {
114 	MAXINT_PTR = INT_PTR.max,
115 	MININT_PTR = INT_PTR.min
116 }
117 
118 enum : ULONG_PTR {
119 	MAXULONG_PTR = ULONG_PTR.max
120 }
121 
122 enum : LONG_PTR {
123 	MAXLONG_PTR = LONG_PTR.max,
124 	MINLONG_PTR = LONG_PTR.min
125 }
126 
127 enum : UHALF_PTR {
128 	MAXUHALF_PTR = UHALF_PTR.max
129 }
130 
131 enum : HALF_PTR {
132 	MAXHALF_PTR = HALF_PTR.max,
133 	MINHALF_PTR = HALF_PTR.min
134 }
135 
136 alias byte INT8;
137 alias byte* PINT8;
138 alias ubyte UINT8;
139 alias ubyte* PUINT8;
140 
141 alias short INT16;
142 alias short* PINT16;
143 alias ushort UINT16;
144 alias ushort* PUINT16;
145 
146 alias int LONG32, INT32;
147 alias int* PLONG32, PINT32;
148 alias uint ULONG32, DWORD32, UINT32;
149 alias uint* PULONG32, PDWORD32, PUINT32;
150 
151 alias ULONG_PTR SIZE_T, DWORD_PTR;
152 alias ULONG_PTR* PSIZE_T, PDWORD_PTR;
153 alias LONG_PTR SSIZE_T;
154 alias LONG_PTR* PSSIZE_T;
155 
156 alias long LONG64, INT64;
157 alias long* PLONG64, PINT64;
158 alias ulong ULONG64, DWORD64, UINT64;
159 alias ulong* PULONG64, PDWORD64, PUINT64;