1 /** 2 * Windows API header module 3 * 4 * Translated from MinGW API for MS-Windows 3.12 5 * 6 * Authors: Stewart Gordon 7 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) 8 * Source: $(DRUNTIMESRC core/sys/windows/_basetsd.d) 9 */ 10 module nulib.system.win32.basetsd; 11 12 13 // [SnakE 2009-02-23] Moved HANDLE definition here from winnt.d to avoid 14 // 'forwatd template reference' to CPtr from winnt.d caused by a circular 15 // import. 16 alias HANDLE = void*; 17 18 alias HANDLE* PHANDLE, LPHANDLE; 19 20 // helper for aligned structs 21 // alignVal 0 means the default align. 22 // _alignSpec as parameter does not pollute namespace. 23 package mixin template AlignedStr(int alignVal, string name, string memberlist, 24 string _alignSpec = !alignVal ? "align" : "align("~alignVal.stringof~")" ) 25 { 26 mixin( _alignSpec ~ " struct " ~ name ~" { " ~ _alignSpec ~":"~ memberlist~" }" ); 27 } 28 29 version (CoreUnittest) { 30 private mixin AlignedStr!(16, "_Test_Aligned_Str", q{char a; char b;}); 31 private mixin AlignedStr!(0, "_Test_NoAligned_Str", q{char a; char b;}); 32 } 33 34 version (Win64) { 35 alias __int3264 = long; 36 enum ulong ADDRESS_TAG_BIT = 0x40000000000; 37 38 alias long INT_PTR, LONG_PTR; 39 alias long* PINT_PTR, PLONG_PTR; 40 alias ulong UINT_PTR, ULONG_PTR, HANDLE_PTR; 41 alias ulong* PUINT_PTR, PULONG_PTR; 42 alias HALF_PTR = int; 43 alias PHALF_PTR = int*; 44 alias UHALF_PTR = uint; 45 alias PUHALF_PTR = uint*; 46 47 uint HandleToULong(void* h) { return(cast(uint) cast(ULONG_PTR) h); } 48 int HandleToLong(void* h) { return(cast(int) cast(LONG_PTR) h); } 49 void* ULongToHandle(uint h) { return(cast(void*) cast(UINT_PTR) h); } 50 void* LongToHandle(int h) { return(cast(void*) cast(INT_PTR) h); } 51 uint PtrToUlong(void* p) { return(cast(uint) cast(ULONG_PTR) p); } 52 uint PtrToUint(void* p) { return(cast(uint) cast(UINT_PTR) p); } 53 ushort PtrToUshort(void* p) { return(cast(ushort) cast(uint) cast(ULONG_PTR) p); } 54 int PtrToLong(void* p) { return(cast(int) cast(LONG_PTR) p); } 55 int PtrToInt(void* p) { return(cast(int) cast(INT_PTR) p); } 56 short PtrToShort(void* p) { return(cast(short) cast(int) cast(LONG_PTR) p); } 57 void* IntToPtr(int i) { return(cast(void*) cast(INT_PTR) i); } 58 void* UIntToPtr(uint ui) { return(cast(void*) cast(UINT_PTR) ui); } 59 void* LongToPtr(int l) { return(cast(void*) cast(LONG_PTR) l); } 60 void* ULongToPtr(uint ul) { return(cast(void*) cast(ULONG_PTR) ul); } 61 62 } else { 63 alias __int3264 = int; 64 enum uint ADDRESS_TAG_BIT = 0x80000000; 65 66 alias int INT_PTR, LONG_PTR; 67 alias int* PINT_PTR, PLONG_PTR; 68 alias uint UINT_PTR, ULONG_PTR, HANDLE_PTR; 69 alias uint* PUINT_PTR, PULONG_PTR; 70 alias HALF_PTR = short; 71 alias PHALF_PTR = short*; 72 alias UHALF_PTR = ushort; 73 alias PUHALF_PTR = ushort*; 74 75 uint HandleToUlong(HANDLE h) { return cast(uint) h; } 76 int HandleToLong(HANDLE h) { return cast(int) h; } 77 HANDLE LongToHandle(LONG_PTR h) { return cast(HANDLE)h; } 78 uint PtrToUlong(const(void)* p) { return cast(uint) p; } 79 uint PtrToUint(const(void)* p) { return cast(uint) p; } 80 int PtrToInt(const(void)* p) { return cast(int) p; } 81 ushort PtrToUshort(const(void)* p) { return cast(ushort) p; } 82 short PtrToShort(const(void)* p) { return cast(short) p; } 83 void* IntToPtr(int i) { return cast(void*) i; } 84 void* UIntToPtr(uint ui) { return cast(void*) ui; } 85 alias LongToPtr = IntToPtr; 86 alias ULongToPtr = UIntToPtr; 87 } 88 89 alias UIntToPtr UintToPtr, UlongToPtr; 90 91 enum : UINT_PTR { 92 MAXUINT_PTR = UINT_PTR.max 93 } 94 95 enum : INT_PTR { 96 MAXINT_PTR = INT_PTR.max, 97 MININT_PTR = INT_PTR.min 98 } 99 100 enum : ULONG_PTR { 101 MAXULONG_PTR = ULONG_PTR.max 102 } 103 104 enum : LONG_PTR { 105 MAXLONG_PTR = LONG_PTR.max, 106 MINLONG_PTR = LONG_PTR.min 107 } 108 109 enum : UHALF_PTR { 110 MAXUHALF_PTR = UHALF_PTR.max 111 } 112 113 enum : HALF_PTR { 114 MAXHALF_PTR = HALF_PTR.max, 115 MINHALF_PTR = HALF_PTR.min 116 } 117 118 alias INT8 = byte; 119 alias PINT8 = byte*; 120 alias UINT8 = ubyte; 121 alias PUINT8 = ubyte*; 122 123 alias INT16 = short; 124 alias PINT16 = short*; 125 alias UINT16 = ushort; 126 alias PUINT16 = ushort*; 127 128 alias int LONG32, INT32; 129 alias int* PLONG32, PINT32; 130 alias uint ULONG32, DWORD32, UINT32; 131 alias uint* PULONG32, PDWORD32, PUINT32; 132 133 alias ULONG_PTR SIZE_T, DWORD_PTR; 134 alias ULONG_PTR* PSIZE_T, PDWORD_PTR; 135 alias SSIZE_T = LONG_PTR; 136 alias PSSIZE_T = LONG_PTR*; 137 138 alias long LONG64, INT64; 139 alias long* PLONG64, PINT64; 140 alias ulong ULONG64, DWORD64, UINT64; 141 alias ulong* PULONG64, PDWORD64, PUINT64;