Added/modified documentation for function arguments.
[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 "wine/unicode.h"
13 #include "debugtools.h"
14
15 DEFAULT_DEBUG_CHANNEL(shell);
16
17 extern HINSTANCE shlwapi_hInstance;
18
19 /*
20  NOTES: The most functions exported by ordinal seem to be superflous.
21  The reason for these functions to be there is to provide a wraper
22  for unicode functions to providing these functions on systems without
23  unicode functions eg. win95/win98. Since we have such functions we just
24  call these.
25 */
26
27 /*************************************************************************
28  *      SHLWAPI_1       [SHLWAPI.1]
29  */
30 DWORD WINAPI SHLWAPI_1 (
31         LPSTR lpStr,
32         LPVOID x)
33 {
34         FIXME("(%p %s %p %s)\n",lpStr, debugstr_a(lpStr),x, debugstr_a(x));
35         return 0;
36 }
37
38 /*************************************************************************
39  *      SHLWAPI_2       [SHLWAPI.2]
40  */
41 DWORD WINAPI SHLWAPI_2 (LPCWSTR x,LPVOID y)
42 {
43         FIXME("(%s,%p)\n",debugstr_w(x),y);
44         return 0;
45 }
46
47 /*************************************************************************
48  *      SHLWAPI_16      [SHLWAPI.16]
49  */
50 HRESULT WINAPI SHLWAPI_16 (
51         LPVOID w,
52         LPVOID x,
53         LPVOID y,
54         LPWSTR z)
55 {
56         FIXME("(%p %p %p %p)stub\n",w,x,y,z);
57         return 0xabba1252;
58 }
59
60 /*************************************************************************
61  *      SHLWAPI_23      [SHLWAPI.23]
62  *
63  * NOTES
64  *      converts a guid to a string
65  *      returns strlen(str)
66  */
67 DWORD WINAPI SHLWAPI_23 (
68         REFGUID guid,   /* [in]  clsid */
69         LPSTR str,      /* [out] buffer */
70         INT cmax)       /* [in]  size of buffer */
71 {
72         char xguid[40];
73
74         sprintf( xguid, "{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
75                  guid->Data1, guid->Data2, guid->Data3,
76                  guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3],
77                  guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7] );
78         TRACE("(%s %p 0x%08x)stub\n", xguid, str, cmax);
79         if (strlen(xguid)>=cmax) return 0;
80         strcpy(str,xguid);
81         return strlen(xguid) + 1;
82 }
83
84 /*************************************************************************
85  *      SHLWAPI_24      [SHLWAPI.24]
86  *
87  * NOTES
88  *      converts a guid to a string
89  *      returns strlen(str)
90  */
91 DWORD WINAPI SHLWAPI_24 (
92         REFGUID guid,   /* [in]  clsid */
93         LPWSTR str,     /* [out] buffer */
94         INT cmax)       /* [in]  size of buffer */
95 {
96     char xguid[40];
97
98     sprintf( xguid, "{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
99              guid->Data1, guid->Data2, guid->Data3,
100              guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3],
101              guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7] );
102     return MultiByteToWideChar( CP_ACP, 0, xguid, -1, str, cmax );
103 }
104
105 /*************************************************************************
106  *      SHLWAPI_38      [SHLWAPI.38]
107  *
108  */
109 DWORD WINAPI SHLWAPI_38 ( DWORD x) {
110     FIXME("(%lx),stub!\n",x);
111     return 0;
112 }
113 /*************************************************************************
114  *      SHLWAPI_137
115  */
116 DWORD WINAPI SHLWAPI_137(
117         UINT  what)
118 {
119   FIXME("(%#x)stub\n", what);
120   return 0;
121 }  
122 /*************************************************************************
123  *      SHLWAPI_141
124  */
125 DWORD WINAPI SHLWAPI_141( LPVOID ptr, DWORD x , LPVOID ptr2)
126 {
127   FIXME("(%p,%ld,%p), stub\n", ptr,x,ptr2);
128   return 0;
129 }  
130 /*************************************************************************
131  *      SHLWAPI_151     [SHLWAPI.151]
132  */
133 DWORD WINAPI SHLWAPI_151(void)
134 {
135   FIXME(": stub\n");
136   return 0;
137 }
138
139 /*************************************************************************
140  *      SHLWAPI_153     [SHLWAPI.153]
141  */
142 DWORD WINAPI SHLWAPI_153(DWORD dw1, DWORD dw2, DWORD dw3)
143 {
144     FIXME("%08lx %08lx %08lx - stub\n", dw1, dw2, dw3);
145     return 0;
146 }
147
148 /*************************************************************************
149  *      SHLWAPI_156     [SHLWAPI.156]
150  *
151  * FIXME: function guessed
152  */
153 DWORD WINAPI SHLWAPI_156 (
154         LPWSTR str1,    /* [???] NOTE: "shell32.dll" */
155         LPWSTR str2)    /* [???] NOTE: "shell32.dll" */
156 {
157         FIXME("(%s %s)stub\n",debugstr_w(str1),debugstr_w(str2));
158         return lstrcmpW(str1,str2);
159 }
160
161 /*************************************************************************
162  *      SHLWAPI_169     [SHLWAPI.169]
163  */
164 DWORD WINAPI SHLWAPI_169 (IUnknown * lpUnknown)
165 {
166         TRACE("(%p)\n",lpUnknown);
167 #if 0
168         if(!lpUnknown || !*((LPDWORD)lpUnknown)) return 0;
169         return IUnknown_Release(lpUnknown);
170 #endif
171         return 0;
172 }
173
174 /*************************************************************************
175  *      SHLWAPI_193     [SHLWAPI.193]
176  */
177 DWORD WINAPI SHLWAPI_193 ()
178 {
179         HDC hdc;
180         DWORD ret;
181
182         TRACE("()\n");
183
184         hdc = GetDC(0);
185         ret = GetDeviceCaps(hdc, BITSPIXEL) * GetDeviceCaps(hdc, PLANES);
186         ReleaseDC(0, hdc);
187         return ret;
188 }
189
190 /*************************************************************************
191  *      SHLWAPI_215     [SHLWAPI.215]
192  *
193  * NOTES
194  *  check me!
195  */
196 LPWSTR WINAPI SHLWAPI_215 (
197         LPWSTR lpStrSrc,
198         LPVOID lpwStrDest,
199         int len)
200 {
201         WARN("(%p %p %u)\n",lpStrSrc,lpwStrDest,len);
202         return strncpyW(lpwStrDest, lpStrSrc, len);
203 }
204
205 /*************************************************************************
206  *      SHLWAPI_219     [SHLWAPI.219]
207  *
208  * NOTES
209  *  error codes: E_POINTER, E_NOINTERFACE
210  */
211 HRESULT WINAPI SHLWAPI_219 (
212         LPVOID w, /* [???] NOTE: returned by LocalAlloc, 0x450 bytes, iface */
213         LPVOID x,
214         LPVOID y,
215         LPWSTR z) /* [???] NOTE: OUT: path */
216 {
217         FIXME("(%p %p %p %p)stub\n",w,x,y,z);
218         return 0xabba1252;
219 }
220
221 /*************************************************************************
222  *      SHLWAPI_222     [SHLWAPI.222]
223  *
224  * NOTES
225  *  securityattributes missing
226  */
227 HANDLE WINAPI SHLWAPI_222 (LPCLSID guid)
228 {
229         char lpstrName[80];
230
231         sprintf( lpstrName, "shell.{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
232                  guid->Data1, guid->Data2, guid->Data3,
233                  guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3],
234                  guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7] );
235         FIXME("(%s) stub\n", lpstrName);
236         return CreateSemaphoreA(NULL,0, 0x7fffffff, lpstrName);
237 }
238
239 /*************************************************************************
240  *      SHLWAPI_223     [SHLWAPI.223]
241  *
242  * NOTES
243  *  get the count of the semaphore
244  */
245 DWORD WINAPI SHLWAPI_223 (HANDLE handle)
246 {
247         DWORD oldCount;
248         
249         FIXME("(0x%08x) stub\n",handle);
250
251         ReleaseSemaphore( handle, 1, &oldCount);        /* +1 */
252         WaitForSingleObject( handle, 0 );               /* -1 */
253         return oldCount;
254 }
255
256 /*************************************************************************
257  *      SHLWAPI_237     [SHLWAPI.237]
258  *
259  * NOTES
260  *  checks if a class is registered, if not it registers it
261  */
262 DWORD WINAPI SHLWAPI_237 (WNDCLASSW * lpWndClass)
263 {
264         WNDCLASSW WndClass;
265         
266         TRACE("(0x%08x %s)\n",lpWndClass->hInstance, debugstr_w(lpWndClass->lpszClassName));
267
268         if (!GetClassInfoW(lpWndClass->hInstance, lpWndClass->lpszClassName, &WndClass))
269         {
270           return RegisterClassW(lpWndClass);
271         }
272         return TRUE;
273 }
274
275 /*************************************************************************
276  *      SHLWAPI_241     [SHLWAPI.241]
277  *
278  */
279 DWORD WINAPI SHLWAPI_241 ()
280 {
281         FIXME("()stub\n");
282         return 0xabba1243;
283 }
284
285 /*************************************************************************
286  *      SHLWAPI_266     [SHLWAPI.266]
287  */
288 DWORD WINAPI SHLWAPI_266 (
289         LPVOID w,
290         LPVOID x,
291         LPVOID y,
292         LPVOID z)
293 {
294         FIXME("(%p %p %p %p)stub\n",w,x,y,z);
295         return 0xabba1248;
296 }
297
298 /*************************************************************************
299  *      SHLWAPI_267     [SHLWAPI.267]
300  */
301 HRESULT WINAPI SHLWAPI_267 (
302         LPVOID w, /* [???] NOTE: same as 1th parameter of SHLWAPI_219 */
303         LPVOID x, /* [???] NOTE: same as 2nd parameter of SHLWAPI_219 */
304         LPVOID y,
305         LPVOID z)
306 {
307         FIXME("(%p %p %p %p)stub\n",w,x,y,z);
308         *((LPDWORD)z) = 0xabba1200;
309         return 0xabba1254;
310 }
311
312 /*************************************************************************
313  *      SHLWAPI_268     [SHLWAPI.268]
314  */
315 DWORD WINAPI SHLWAPI_268 (
316         LPVOID w,
317         LPVOID x)
318 {
319         FIXME("(%p %p)\n",w,x);
320         return 0xabba1251; /* 0 = failure */
321 }
322
323 /*************************************************************************
324  *      SHLWAPI_276     [SHLWAPI.276]
325  *
326  */
327 DWORD WINAPI SHLWAPI_276 ()
328 {
329         FIXME("()stub\n");
330         return 0xabba1244;
331 }
332
333 /*************************************************************************
334  *      SHLWAPI_278     [SHLWAPI.278]
335  *
336  */
337 DWORD WINAPI SHLWAPI_278 (
338         LONG wndProc,
339         HWND hWndParent,
340         DWORD dwExStyle,
341         DWORD dwStyle,
342         HMENU hMenu,
343         LONG z)
344 {
345         WNDCLASSA wndclass;
346         HWND hwnd;
347         HCURSOR hCursor;
348         char * clsname = "WorkerA";
349         
350         FIXME("(0x%08lx 0x%08x 0x%08lx 0x%08lx 0x%08x 0x%08lx)stub\n",
351           wndProc,hWndParent,dwExStyle,dwStyle,hMenu,z);
352
353         hCursor = LoadCursorA(0x00000000,IDC_ARROWA);
354
355         if(!GetClassInfoA(shlwapi_hInstance, clsname, &wndclass))
356         {
357           RtlZeroMemory(&wndclass, sizeof(WNDCLASSA));
358           wndclass.lpfnWndProc = DefWindowProcW;
359           wndclass.cbWndExtra = 4;
360           wndclass.hInstance = shlwapi_hInstance;
361           wndclass.hCursor = hCursor;
362           wndclass.hbrBackground = COLOR_BTNSHADOW;
363           wndclass.lpszMenuName = NULL;
364           wndclass.lpszClassName = clsname;
365           RegisterClassA (&wndclass);
366         }
367         hwnd = CreateWindowExA(dwExStyle, clsname, 0,dwStyle,0,0,0,0,hWndParent,
368                 hMenu,shlwapi_hInstance,0);
369         SetWindowLongA(hwnd, 0, z);
370         SetWindowLongA(hwnd, GWL_WNDPROC, wndProc);
371         return hwnd;
372 }
373
374 /*************************************************************************
375  *      SHLWAPI_342     [SHLWAPI.342]
376  *
377  */
378 DWORD WINAPI SHLWAPI_342 (
379         LPVOID w,
380         LPVOID x,
381         LPVOID y,
382         LPVOID z)
383 {
384         FIXME("(%p %p %p %p)stub\n",w,x,y,z);
385         return 0xabba1249;
386 }
387
388 /*************************************************************************
389  *      SHLWAPI_346     [SHLWAPI.346]
390  */
391 DWORD WINAPI SHLWAPI_346 (
392         LPCWSTR src,
393         LPWSTR dest,
394         int len)
395 {
396         FIXME("(%s %p 0x%08x)stub\n",debugstr_w(src),dest,len);
397         lstrcpynW(dest, src, len);
398         return lstrlenW(dest)+1;
399 }
400
401 /*************************************************************************
402  *      SHLWAPI_376     [SHLWAPI.377]
403  */
404 DWORD WINAPI SHLWAPI_376 (LONG x)
405 {
406         FIXME("(0x%08lx)stub\n", x );
407         return 0xabba1245;
408 }
409
410 /*************************************************************************
411  *      SHLWAPI_377     [SHLWAPI.377]
412  */
413 DWORD WINAPI SHLWAPI_377 (LPVOID x, LPVOID y, LPVOID z)
414 {
415         FIXME("(%p %p %p)stub\n", x,y,z);
416         return 0xabba1246;
417 }
418
419 /*************************************************************************
420  *      SHLWAPI_378     [SHLWAPI.378]
421  */
422 DWORD WINAPI SHLWAPI_378 (
423         LPSTR x,
424         LPVOID y, /* [???] 0x50000000 */
425         LPVOID z) /* [???] 4 */
426 {
427         FIXME("(%s %p %p)stub\n", x,y,z);
428         return LoadLibraryA(x);
429 }
430
431 /*************************************************************************
432  *      SHLWAPI_431     [SHLWAPI.431]
433  */
434 DWORD WINAPI SHLWAPI_431 (DWORD x)
435 {
436         FIXME("(0x%08lx)stub\n", x);
437         return 0xabba1247;
438 }
439
440 /*************************************************************************
441  *      SHLWAPI_437     [SHLWAPI.437]
442  *
443  * NOTES
444  *  has to do something with switching the api between ascii and unicode
445  *  observed values: 0 and 5
446  *
447  * accesses
448  * HKLM\System\CurrentControlSet\Control\ProductOptions
449  *
450  */
451 DWORD WINAPI SHLWAPI_437 (DWORD x)
452 {
453         FIXME("(0x%08lx)stub\n", x);
454         return 0xabba1247;
455 }
456
457 /*************************************************************************
458  *      UrlEscapeA      [SHLWAPI]
459  */
460 HRESULT WINAPI UrlEscapeA(
461         LPCSTR pszUrl,
462         LPSTR pszEscaped,
463         LPDWORD pcchEscaped,
464         DWORD dwFlags)
465 {
466         FIXME("(%s %p %p 0x%08lx)stub\n",debugstr_a(pszUrl),
467           pszEscaped, pcchEscaped, dwFlags);
468         return 0;
469 }       
470
471 /*************************************************************************
472  *      UrlEscapeW      [SHLWAPI]
473  */
474 HRESULT WINAPI UrlEscapeW(
475         LPCWSTR pszUrl,
476         LPWSTR pszEscaped,
477         LPDWORD pcchEscaped,
478         DWORD dwFlags)
479 {
480         FIXME("(%s %p %p 0x%08lx)stub\n",debugstr_w(pszUrl),
481           pszEscaped, pcchEscaped, dwFlags);
482         return 0;
483 }       
484
485
486 /*************************************************************************
487  *      SHCreateShellPalette    [SHLWAPI.@]
488  */
489 HPALETTE WINAPI SHCreateShellPalette(HDC hdc)
490 {
491         FIXME("stub\n");
492         return CreateHalftonePalette(hdc);
493 }
494
495 /*************************************************************************
496  *      SHGetInverseCMAP
497  */
498 DWORD WINAPI SHGetInverseCMAP (LPVOID x, DWORD why)
499 {
500         FIXME("(%p, %#lx)stub\n", x, why); 
501         return 0;
502 }       
503 /*************************************************************************
504  *      SHIsLowMemoryMachine    [SHLWAPI.@]
505  */
506 DWORD WINAPI SHIsLowMemoryMachine (DWORD x)
507 {
508         FIXME("0x%08lx\n", x);
509         return 0;
510 }