1 /***********************************************************************\
2 *                                msacm.d                                *
3 *                                                                       *
4 *                       Windows API header module                       *
5 *                                                                       *
6 *                 Translated from MinGW Windows headers                 *
7 *                           by Stewart Gordon                           *
8 *                                                                       *
9 *                       Placed into public domain                       *
10 \***********************************************************************/
11 module win32.msacm;
12 version(Windows):
13 
14 private import win32.basetsd, win32.mmsystem, win32.windef;
15 
16 mixin DECLARE_HANDLE!("HACMDRIVERID");
17 mixin DECLARE_HANDLE!("HACMDRIVER");
18 alias HACMDRIVER* LPHACMDRIVER;
19 
20 /* Comment from MinGW
21 	found through experimentation
22  */
23 const size_t
24 	ACMDRIVERDETAILS_SHORTNAME_CHARS =  32,
25 	ACMDRIVERDETAILS_LONGNAME_CHARS  = 128,
26 	ACMDRIVERDETAILS_COPYRIGHT_CHARS =  80,
27 	ACMDRIVERDETAILS_LICENSING_CHARS = 128;
28 
29 /* Comment from MinGW
30 	I don't know the right values for these macros
31  */
32 const size_t
33 	ACMFORMATDETAILS_FORMAT_CHARS       = 256,
34 	ACMFORMATTAGDETAILS_FORMATTAG_CHARS = 256,
35 	ACMDRIVERDETAILS_FEATURES_CHARS     = 256;
36 
37 struct ACMFORMATDETAILSA {
38 	DWORD          cbStruct = ACMFORMATDETAILSA.sizeof;  // are they?
39 	DWORD          dwFormatIndex;
40 	DWORD          dwFormatTag;
41 	DWORD          fdwSupport;
42 	LPWAVEFORMATEX pwfx;
43 	DWORD          cbwfx;
44 	char[ACMFORMATDETAILS_FORMAT_CHARS] szFormat;
45 }
46 alias ACMFORMATDETAILSA* LPACMFORMATDETAILSA;
47 
48 struct ACMFORMATDETAILSW {
49 	DWORD          cbStruct = ACMFORMATDETAILSW.sizeof;
50 	DWORD          dwFormatIndex;
51 	DWORD          dwFormatTag;
52 	DWORD          fdwSupport;
53 	LPWAVEFORMATEX pwfx;
54 	DWORD          cbwfx;
55 	WCHAR[ACMFORMATDETAILS_FORMAT_CHARS] szFormat;
56 }
57 alias ACMFORMATDETAILSW* LPACMFORMATDETAILSW;
58 
59 struct ACMFORMATTAGDETAILSA {
60 	DWORD cbStruct = ACMFORMATTAGDETAILSA.sizeof;
61 	DWORD dwFormatTagIndex;
62 	DWORD dwFormatTag;
63 	DWORD cbFormatSize;
64 	DWORD fdwSupport;
65 	DWORD cStandardFormats;
66 	char[ACMFORMATTAGDETAILS_FORMATTAG_CHARS] szFormatTag;
67 }
68 alias ACMFORMATTAGDETAILSA* LPACMFORMATTAGDETAILSA;
69 
70 struct ACMFORMATTAGDETAILSW {
71 	DWORD cbStruct = ACMFORMATTAGDETAILSW.sizeof;
72 	DWORD dwFormatTagIndex;
73 	DWORD dwFormatTag;
74 	DWORD cbFormatSize;
75 	DWORD fdwSupport;
76 	DWORD cStandardFormats;
77 	WCHAR[ACMFORMATTAGDETAILS_FORMATTAG_CHARS] szFormatTag;
78 }
79 alias ACMFORMATTAGDETAILSW* LPACMFORMATTAGDETAILSW;
80 
81 struct ACMDRIVERDETAILSA {
82 	DWORD  cbStruct = ACMDRIVERDETAILSA.sizeof;
83 	FOURCC fccType;
84 	FOURCC fccComp;
85 	WORD   wMid;
86 	WORD   wPid;
87 	DWORD  vdwACM;
88 	DWORD  vdwDriver;
89 	DWORD  fdwSupport;
90 	DWORD  cFormatTags;
91 	DWORD  cFilterTags;
92 	HICON  hicon;
93 	char[ACMDRIVERDETAILS_SHORTNAME_CHARS] szShortName;
94 	char[ACMDRIVERDETAILS_LONGNAME_CHARS]  szLongName;
95 	char[ACMDRIVERDETAILS_COPYRIGHT_CHARS] szCopyright;
96 	char[ACMDRIVERDETAILS_LICENSING_CHARS] szLicensing;
97 	char[ACMDRIVERDETAILS_FEATURES_CHARS]  szFeatures;
98 }
99 alias ACMDRIVERDETAILSA* LPACMDRIVERDETAILSA;
100 
101 struct ACMDRIVERDETAILSW {
102 	DWORD  cbStruct = ACMDRIVERDETAILSW.sizeof;
103 	FOURCC fccType;
104 	FOURCC fccComp;
105 	WORD   wMid;
106 	WORD   wPid;
107 	DWORD  vdwACM;
108 	DWORD  vdwDriver;
109 	DWORD  fdwSupport;
110 	DWORD  cFormatTags;
111 	DWORD  cFilterTags;
112 	HICON  hicon;
113 	WCHAR[ACMDRIVERDETAILS_SHORTNAME_CHARS] szShortName;
114 	WCHAR[ACMDRIVERDETAILS_LONGNAME_CHARS]  szLongName;
115 	WCHAR[ACMDRIVERDETAILS_COPYRIGHT_CHARS] szCopyright;
116 	WCHAR[ACMDRIVERDETAILS_LICENSING_CHARS] szLicensing;
117 	WCHAR[ACMDRIVERDETAILS_FEATURES_CHARS]  szFeatures;
118 }
119 alias ACMDRIVERDETAILSW* LPACMDRIVERDETAILSW;
120 
121 extern (Windows) {
122 	alias BOOL function(HACMDRIVERID hadid, LPACMFORMATDETAILSA pafd,
123 	  DWORD_PTR dwInstance, DWORD fdwSupport) ACMFORMATENUMCBA;
124 	alias BOOL function(HACMDRIVERID hadid, LPACMFORMATDETAILSW pafd,
125 	  DWORD_PTR dwInstance, DWORD fdwSupport) ACMFORMATENUMCBW;
126 	alias BOOL function(HACMDRIVERID hadid, LPACMFORMATTAGDETAILSA paftd,
127 	  DWORD_PTR dwInstance, DWORD fdwSupport) ACMFORMATTAGENUMCBA;
128 	alias BOOL function(HACMDRIVERID hadid, LPACMFORMATTAGDETAILSW paftd,
129 	  DWORD_PTR dwInstance, DWORD fdwSupport) ACMFORMATTAGENUMCBW;
130 	alias BOOL function(HACMDRIVERID hadid, DWORD_PTR dwInstance,
131 	  DWORD fdwSupport) ACMDRIVERENUMCB;
132 
133 	MMRESULT acmDriverOpen(LPHACMDRIVER phad, HACMDRIVERID hadid,
134 	  DWORD fdwOpen);
135 	MMRESULT acmDriverEnum(ACMDRIVERENUMCB fnCallback, DWORD_PTR dwInstance,
136 	  DWORD fdwEnum);
137 	MMRESULT acmFormatEnumA(HACMDRIVER had, LPACMFORMATDETAILSA pafd,
138 	  ACMFORMATENUMCBA fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum);
139 	MMRESULT acmFormatEnumW(HACMDRIVER had, LPACMFORMATDETAILSW pafd,
140 	  ACMFORMATENUMCBW fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum);
141 	MMRESULT acmDriverClose(HACMDRIVER had, DWORD fdwClose);
142 	MMRESULT acmDriverDetailsA(HACMDRIVERID hadid, LPACMDRIVERDETAILSA padd,
143 	  DWORD fdwDetails);
144 	MMRESULT acmDriverDetailsW(HACMDRIVERID hadid, LPACMDRIVERDETAILSW padd,
145 	  DWORD fdwDetails);
146 	MMRESULT acmFormatTagEnumA(HACMDRIVER had, LPACMFORMATTAGDETAILSA paftd,
147 	  ACMFORMATTAGENUMCBA fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum);
148 	MMRESULT acmFormatTagEnumW(HACMDRIVER had, LPACMFORMATTAGDETAILSW paftd,
149 	  ACMFORMATTAGENUMCBW fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum);
150 }
151 
152 version (Unicode) {
153 	alias ACMFORMATDETAILSW ACMFORMATDETAILS;
154 	alias ACMFORMATTAGDETAILSW ACMFORMATTAGDETAILS;
155 	alias ACMDRIVERDETAILSW ACMDRIVERDETAILS;
156 	alias ACMFORMATENUMCBW ACMFORMATENUMCB;
157 	alias ACMFORMATTAGENUMCBW ACMFORMATTAGENUMCB;
158 	alias acmFormatEnumW acmFormatEnum;
159 	alias acmDriverDetailsW acmDriverDetails;
160 	alias acmFormatTagEnumW acmFormatTagEnum;
161 } else {
162 	alias ACMFORMATDETAILSA ACMFORMATDETAILS;
163 	alias ACMFORMATTAGDETAILSA ACMFORMATTAGDETAILS;
164 	alias ACMDRIVERDETAILSA ACMDRIVERDETAILS;
165 	alias ACMFORMATENUMCBA ACMFORMATENUMCB;
166 	alias ACMFORMATTAGENUMCBA ACMFORMATTAGENUMCB;
167 	alias acmFormatEnumA acmFormatEnum;
168 	alias acmDriverDetailsA acmDriverDetails;
169 	alias acmFormatTagEnumA acmFormatTagEnum;
170 }
171 
172 alias ACMFORMATDETAILS* LPACMFORMATDETAILS;
173 alias ACMFORMATTAGDETAILS* LPACMFORMATTAGDETAILS;
174 alias ACMDRIVERDETAILS* LPACMDRIVERDETAILS;