1 module aurora.directx.com;
2 
3 public import core.sys.windows.windows;
4 public import core.sys.windows.com;
5 
6 import core.atomic;
7 
8 public:
9 
10 mixin(uuid!(IUnknown, "00000000-0000-0000-C000-000000000046"));
11 mixin(uuid!(IClassFactory,"00000001-0000-0000-C000-000000000046"));
12 
13 public struct LUID {
14 	uint LowPart;
15 	int HighPart;
16 }
17 
18 struct GUID {
19   ulong  Data1;
20   ushort Data2;
21   ushort Data3;
22   ubyte[8] Data4;
23 }
24 alias GUID UUID;
25 
26 public struct SIZE {
27 	long X;
28 	long Y;
29 }
30 
31 struct FILETIME {
32   uint dwLowDateTime;
33   uint dwHighDateTime;
34 }
35 
36 struct FONTSIGNATURE
37 {
38     int[4] fsUsb;
39     int[2] fsCsb;
40 }
41 
42 public template uuid(T, const char[] g) {
43 	const char [] uuid =
44 		"const IID IID_" ~ T.stringof ~ "={ 0x" ~ g[0..8] ~ ",0x" ~ g[9..13] ~ ",0x" ~ g[14..18] ~ ",[0x" ~ g[19..21] ~ ",0x" ~ g[21..23] ~ ",0x" ~ g[24..26] ~ ",0x" ~ g[26..28] ~ ",0x" ~ g[28..30] ~ ",0x" ~ g[30..32] ~ ",0x" ~ g[32..34] ~ ",0x" ~ g[34..36] ~ "]};" ~
45 		"template uuidof(T:" ~ T.stringof ~ "){" ~
46 		"    const IID uuidof ={ 0x" ~ g[0..8] ~ ",0x" ~ g[9..13] ~ ",0x" ~ g[14..18] ~ ",[0x" ~ g[19..21] ~ ",0x" ~ g[21..23] ~ ",0x" ~ g[24..26] ~ ",0x" ~ g[26..28] ~ ",0x" ~ g[28..30] ~ ",0x" ~ g[30..32] ~ ",0x" ~ g[32..34] ~ ",0x" ~ g[34..36] ~ "]};"~
47 		"}";
48 }
49 
50 public struct STATSTG {
51 	LPOLESTR       pwcsName;
52 	DWORD          type;
53 	ULARGE_INTEGER cbSize;
54 	FILETIME       mtime;
55 	FILETIME       ctime;
56 	FILETIME       atime;
57 	DWORD          grfMode;
58 	DWORD          grfLocksSupported;
59 	CLSID          clsid;
60 	DWORD          grfStateBits;
61 	DWORD          reserved;
62 }
63 
64 public class DXPtr(T : IUnknown)
65 {
66 	private T _value = null;
67 
68 	public @property T value() { return _value; }
69 	alias value this;
70 
71 	public this(T value) {
72 		_value = value;
73 	}
74 
75 	public void opAssign(T value) {
76 		if(_value !is null) {
77 			_value.Release();
78 			_value = value;
79 		} else {
80 			_value = value;
81 		}
82 	}
83 
84 	public ~this() {
85 		if(_value !is null) {
86 			_value.Release();
87 			_value = null;
88 		}
89 	}
90 }
91 
92 mixin(uuid!(ISequentialStream, "0C733A30-2A1C-11CE-ADE5-00AA0044773D"));
93 public interface ISequentialStream : IUnknown
94 {
95 extern(Windows):
96 	HRESULT Read(void *pv, ULONG cb, ULONG *pcbRead);
97 	HRESULT Write(const void *pv, ULONG cb, ULONG *pcbWritten);
98 }
99 
100 mixin(uuid!(IStream, "0C733A30-2A1C-11CE-ADE5-00AA0044773D"));
101 public interface IStream : ISequentialStream
102 {
103 extern(Windows):
104 	HRESULT Clone(IStream *ppstm);
105 	HRESULT Commit(uint grfCommitFlags);
106 	HRESULT CopyTo(IStream pstm, ULARGE_INTEGER cb, ULARGE_INTEGER *pcbRead, ULARGE_INTEGER *pcbWritten);
107 	HRESULT LockRegion(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, uint dwLockType);
108 	HRESULT Revert();
109 	HRESULT Seek(LARGE_INTEGER dlibMove, uint dwOrigin, ULARGE_INTEGER *plibNewPosition);
110 	HRESULT SetSize(ULARGE_INTEGER libNewSize);
111 	HRESULT Stat(STATSTG *pstatstg, uint grfStatFlag);
112 	HRESULT UnlockRegion(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, uint dwLockType);
113 }
114 
115 mixin(uuid!(IPrintDocumentPackageTarget, "1b8efec4-3019-4c27-964e-367202156906"));
116 public interface IPrintDocumentPackageTarget : IUnknown
117 {
118 extern(Windows):
119 	HRESULT Cancel();
120 	HRESULT GetPackageTarget(GUID* guidTargetType, IID* riid, void **ppvTarget);
121 	HRESULT GetPackageTargetTypes(uint *targetCount, GUID **targetTypes);
122 }
123 
124 mixin(uuid!(IEnumUnknown, "00000100-0000-0000-C000-000000000046"));
125 public interface IEnumUnknown : IUnknown
126 {
127 extern(Windows):
128 	HRESULT Clone(IEnumUnknown **ppenum);
129 	HRESULT Next(ulong celt, IUnknown **rgelt, ulong *pceltFetched);
130 	HRESULT Reset();
131 	HRESULT Skip(ulong celt);
132 }
133 
134 mixin(uuid!(IEnumString, "00000101-0000-0000-C000-000000000046"));
135 public interface IEnumString : IUnknown
136 {
137 extern(Windows):
138 	HRESULT Clone(IEnumString **ppenum);
139 	HRESULT Next(ulong celt, LPOLESTR *rgelt, ulong *pceltFetched);
140 	HRESULT Reset();
141 	HRESULT Skip(ulong celt);
142 }