Merged msacm and msacm32 dlls.
[wine] / dlls / shlwapi / ordinal.c
1 /*
2  * SHLWAPI ordinal functions
3  * 
4  * Copyright 1997 Marcus Meissner
5  *           1998 Jürgen Schmied
6  */
7
8 #include <stdio.h>
9
10 #include "windef.h"
11 #include "wine/undocshell.h"
12 #include "debugtools.h"
13
14 DEFAULT_DEBUG_CHANNEL(shell);
15
16 extern HINSTANCE shlwapi_hInstance;
17
18 /*
19  NOTES: The most functions exported by ordinal seem to be superflous.
20  The reason for these functions to be there is to provide a wraper
21  for unicode functions to providing these functions on systems without
22  unicode functions eg. win95/win98. Since we have such functions we just
23  call these.
24 */
25
26 /*************************************************************************
27  *      SHLWAPI_1       [SHLWAPI.1]
28  */
29 DWORD WINAPI SHLWAPI_1 (
30         LPSTR lpStr,
31         LPVOID x)
32 {
33         FIXME("(%p %s %p %s)\n",lpStr, debugstr_a(lpStr),x, debugstr_a(x));
34         return 0;
35 }
36
37 /*************************************************************************
38  *      SHLWAPI_16      [SHLWAPI.16]
39  */
40 HRESULT WINAPI SHLWAPI_16 (
41         LPVOID w,
42         LPVOID x,
43         LPVOID y,
44         LPWSTR z)
45 {
46         FIXME("(%p %p %p %p)stub\n",w,x,y,z);
47         return 0xabba1252;
48 }
49
50 /*************************************************************************
51  *      SHLWAPI_23      [SHLWAPI.23]
52  *
53  * NOTES
54  *      converts a guid to a string
55  *      returns strlen(str)
56  */
57 DWORD WINAPI SHLWAPI_23 (
58         REFGUID guid,   /* [in]  clsid */
59         LPSTR str,      /* [out] buffer */
60         INT cmax)       /* [in]  size of buffer */
61 {
62         char xguid[40];
63
64         sprintf( xguid, "{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
65                  guid->Data1, guid->Data2, guid->Data3,
66                  guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3],
67                  guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7] );
68         TRACE("(%s %p 0x%08x)stub\n", xguid, str, cmax);
69         if (strlen(xguid)>=cmax) return 0;
70         strcpy(str,xguid);
71         return strlen(xguid) + 1;
72 }
73
74 /*************************************************************************
75  *      SHLWAPI_24      [SHLWAPI.24]
76  *
77  * NOTES
78  *      converts a guid to a string
79  *      returns strlen(str)
80  */
81 DWORD WINAPI SHLWAPI_24 (
82         REFGUID guid,   /* [in]  clsid */
83         LPWSTR str,     /* [out] buffer */
84         INT cmax)       /* [in]  size of buffer */
85 {
86         TRACE("(%s %p 0x%08x)stub\n", debugstr_guid(guid), str, cmax);
87         return StringFromGUID2(guid, str, cmax);
88 }
89
90 /*************************************************************************
91  *      SHLWAPI_156     [SHLWAPI.156]
92  *
93  * FIXME: function guessed
94  */
95 DWORD WINAPI SHLWAPI_156 (
96         LPWSTR str1,    /* "shell32.dll" */
97         LPWSTR str2)    /* "shell32.dll" */
98 {
99         FIXME("(%s %s)stub\n",debugstr_w(str1),debugstr_w(str2));
100         return lstrcmpW(str1,str2);
101 }
102
103 /*************************************************************************
104  *      SHLWAPI_169     [SHLWAPI.169]
105  */
106 DWORD WINAPI SHLWAPI_169 (IUnknown * lpUnknown)
107 {
108         TRACE("(%p)\n",lpUnknown);
109 #if 0
110         if(!lpUnknown || !*((LPDWORD)lpUnknown)) return 0;
111         return IUnknown_Release(lpUnknown);
112 #endif
113         return 0;
114 }
115
116 /*************************************************************************
117  *      SHLWAPI_193     [SHLWAPI.193]
118  */
119 DWORD WINAPI SHLWAPI_193 ()
120 {
121         HDC hdc;
122         DWORD ret;
123
124         TRACE("()\n");
125
126         hdc = GetDC(0);
127         ret = GetDeviceCaps(hdc, BITSPIXEL) * GetDeviceCaps(hdc, PLANES);
128         ReleaseDC(0, hdc);
129         return ret;
130 }
131
132 /*************************************************************************
133  *      SHLWAPI_215     [SHLWAPI.215]
134  *
135  * NOTES
136  *  check me!
137  */
138 LPWSTR WINAPI SHLWAPI_215 (
139         LPSTR lpStrSrc,
140         LPVOID lpwStrDest,
141         int len)
142 {
143         WARN("(%s %p %u)\n",lpStrSrc,lpwStrDest,len);
144         return NTDLL_wcsncpy(lpwStrDest, lpStrSrc, len);
145 }
146
147 /*************************************************************************
148  *      SHLWAPI_219     [SHLWAPI.219]
149  *
150  * NOTES
151  *  error codes: E_POINTER, E_NOINTERFACE
152  */
153 HRESULT WINAPI SHLWAPI_219 (
154         LPVOID w, /* returned by LocalAlloc, 0x450 bytes, iface */
155         LPVOID x,
156         LPVOID y,
157         LPWSTR z) /* OUT: path */
158 {
159         FIXME("(%p %p %p %p)stub\n",w,x,y,z);
160         return 0xabba1252;
161 }
162
163 /*************************************************************************
164  *      SHLWAPI_222     [SHLWAPI.222]
165  *
166  * NOTES
167  *  securityattributes missing
168  */
169 HANDLE WINAPI SHLWAPI_222 (LPCLSID guid)
170 {
171         char lpstrName[80];
172
173         sprintf( lpstrName, "shell.{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
174                  guid->Data1, guid->Data2, guid->Data3,
175                  guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3],
176                  guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7] );
177         FIXME("(%s) stub\n", lpstrName);
178         return CreateSemaphoreA(NULL,0, 0x7fffffff, lpstrName);
179 }
180
181 /*************************************************************************
182  *      SHLWAPI_223     [SHLWAPI.223]
183  *
184  * NOTES
185  *  get the count of the semaphore
186  */
187 DWORD WINAPI SHLWAPI_223 (HANDLE handle)
188 {
189         DWORD oldCount;
190         
191         FIXME("(0x%08x) stub\n",handle);
192
193         ReleaseSemaphore( handle, 1, &oldCount);        /* +1 */
194         WaitForSingleObject( handle, 0 );               /* -1 */
195         return oldCount;
196 }
197
198 /*************************************************************************
199  *      SHLWAPI_237     [SHLWAPI.237]
200  *
201  * NOTES
202  *  checks if a class is registered, if not it registers it
203  */
204 DWORD WINAPI SHLWAPI_237 (WNDCLASSW * lpWndClass)
205 {
206         WNDCLASSW WndClass;
207         
208         TRACE("(0x%08x %s)\n",lpWndClass->hInstance, debugstr_w(lpWndClass->lpszClassName));
209
210         if (!GetClassInfoW(lpWndClass->hInstance, lpWndClass->lpszClassName, &WndClass))
211         {
212           return RegisterClassW(lpWndClass);
213         }
214         return TRUE;
215 }
216
217 /*************************************************************************
218  *      SHLWAPI_241     [SHLWAPI.241]
219  *
220  */
221 DWORD WINAPI SHLWAPI_241 ()
222 {
223         FIXME("()stub\n");
224         return 0xabba1243;
225 }
226
227 /*************************************************************************
228  *      SHLWAPI_266     [SHLWAPI.266]
229  */
230 DWORD WINAPI SHLWAPI_266 (
231         LPVOID w,
232         LPVOID x,
233         LPVOID y,
234         LPVOID z)
235 {
236         FIXME("(%p %p %p %p)stub\n",w,x,y,z);
237         return 0xabba1248;
238 }
239
240 /*************************************************************************
241  *      SHLWAPI_267     [SHLWAPI.267]
242  */
243 HRESULT WINAPI SHLWAPI_267 (
244         LPVOID w, /* same as 1th parameter of SHLWAPI_219 */
245         LPVOID x, /* same as 2nd parameter of SHLWAPI_219 */
246         LPVOID y,
247         LPVOID z)
248 {
249         FIXME("(%p %p %p %p)stub\n",w,x,y,z);
250         *((LPDWORD)z) = 0xabba1200;
251         return 0xabba1254;
252 }
253
254 /*************************************************************************
255  *      SHLWAPI_268     [SHLWAPI.268]
256  */
257 DWORD WINAPI SHLWAPI_268 (
258         LPVOID w,
259         LPVOID x)
260 {
261         FIXME("(%p %p)\n",w,x);
262         return 0xabba1251; /* 0 = failure */
263 }
264
265 /*************************************************************************
266  *      SHLWAPI_276     [SHLWAPI.276]
267  *
268  */
269 DWORD WINAPI SHLWAPI_276 ()
270 {
271         FIXME("()stub\n");
272         return 0xabba1244;
273 }
274
275 /*************************************************************************
276  *      SHLWAPI_278     [SHLWAPI.278]
277  *
278  */
279 DWORD WINAPI SHLWAPI_278 (
280         LONG wndProc,
281         HWND hWndParent,
282         DWORD dwExStyle,
283         DWORD dwStyle,
284         HMENU hMenu,
285         LONG z)
286 {
287         WNDCLASSA wndclass;
288         HWND hwnd;
289         HCURSOR hCursor;
290         char * clsname = "WorkerA";
291         
292         FIXME("(0x%08lx 0x%08x 0x%08lx 0x%08lx 0x%08x 0x%08lx)stub\n",
293           wndProc,hWndParent,dwExStyle,dwStyle,hMenu,z);
294
295         hCursor = LoadCursorA(0x00000000,IDC_ARROWA);
296
297         if(!GetClassInfoA(shlwapi_hInstance, clsname, &wndclass))
298         {
299           RtlZeroMemory(&wndclass, sizeof(WNDCLASSA));
300           wndclass.lpfnWndProc = DefWindowProcW;
301           wndclass.cbWndExtra = 4;
302           wndclass.hInstance = shlwapi_hInstance;
303           wndclass.hCursor = hCursor;
304           wndclass.hbrBackground = COLOR_BTNSHADOW;
305           wndclass.lpszMenuName = NULL;
306           wndclass.lpszClassName = clsname;
307           RegisterClassA (&wndclass);
308         }
309         hwnd = CreateWindowExA(dwExStyle, clsname, 0,dwStyle,0,0,0,0,hWndParent,
310                 hMenu,shlwapi_hInstance,0);
311         SetWindowLongA(hwnd, 0, z);
312         SetWindowLongA(hwnd, GWL_WNDPROC, wndProc);
313         return hwnd;
314 }
315
316 /*************************************************************************
317  *      SHLWAPI_342     [SHLWAPI.342]
318  *
319  */
320 DWORD WINAPI SHLWAPI_342 (
321         LPVOID w,
322         LPVOID x,
323         LPVOID y,
324         LPVOID z)
325 {
326         FIXME("(%p %p %p %p)stub\n",w,x,y,z);
327         return 0xabba1249;
328 }
329
330 /*************************************************************************
331  *      SHLWAPI_346     [SHLWAPI.346]
332  */
333 DWORD WINAPI SHLWAPI_346 (
334         LPCWSTR src,
335         LPWSTR dest,
336         int len)
337 {
338         FIXME("(%s %p 0x%08x)stub\n",debugstr_w(src),dest,len);
339         lstrcpynW(dest, src, len);
340         return lstrlenW(dest)+1;
341 }
342
343
344 /*************************************************************************
345  *      SHLWAPI_377     [SHLWAPI.377]
346  */
347 DWORD WINAPI SHLWAPI_377 (LPVOID x, LPVOID y, LPVOID z)
348 {
349         FIXME("(%p %p %p)stub\n", x,y,z);
350         return 0xabba1246;
351 }
352
353 /*************************************************************************
354  *      SHLWAPI_378     [SHLWAPI.378]
355  */
356 DWORD WINAPI SHLWAPI_378 (
357         LPSTR x,
358         LPVOID y, /* 0x50000000 */
359         LPVOID z) /* 4 */
360 {
361         FIXME("(%s %p %p)stub\n", x,y,z);
362         return LoadLibraryA(x);
363 }
364
365 /*************************************************************************
366  *      SHLWAPI_431     [SHLWAPI.431]
367  */
368 DWORD WINAPI SHLWAPI_431 (DWORD x)
369 {
370         FIXME("(0x%08lx)stub\n", x);
371         return 0xabba1247;
372 }
373
374 /*************************************************************************
375  *      SHLWAPI_437     [SHLWAPI.437]
376  *
377  * NOTES
378  *  has to do something with switching the api between ascii and unicode
379  *  observed values: 0 and 5
380  *
381  * accesses
382  * HKLM\System\CurrentControlSet\Control\ProductOptions
383  *
384  */
385 DWORD WINAPI SHLWAPI_437 (DWORD x)
386 {
387         FIXME("(0x%08lx)stub\n", x);
388         return 0xabba1247;
389 }
390