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