1 | /* $Id: ordinal.cpp,v 1.1 2000-06-11 08:44:53 phaller Exp $ */
|
---|
2 |
|
---|
3 | /*
|
---|
4 | * Win32 Lightweight SHELL32 for OS/2
|
---|
5 | *
|
---|
6 | * Copyright 2000 Patrick Haller (phaller@gmx.net)
|
---|
7 | * Project Odin Software License can be found in LICENSE.TXT
|
---|
8 | *
|
---|
9 | * Ordinally Exported Functions
|
---|
10 | *
|
---|
11 | */
|
---|
12 |
|
---|
13 | /*****************************************************************************
|
---|
14 | * Remark *
|
---|
15 | *****************************************************************************
|
---|
16 |
|
---|
17 | */
|
---|
18 |
|
---|
19 |
|
---|
20 | /*****************************************************************************
|
---|
21 | * Includes *
|
---|
22 | *****************************************************************************/
|
---|
23 |
|
---|
24 | #include <odin.h>
|
---|
25 | #include <odinwrap.h>
|
---|
26 | #include <os2sel.h>
|
---|
27 |
|
---|
28 | #include <string.h>
|
---|
29 | #include <ctype.h>
|
---|
30 | #include <wctype.h>
|
---|
31 | #include <wcstr.h>
|
---|
32 | #define HAVE_WCTYPE_H
|
---|
33 |
|
---|
34 | #include "debugtools.h"
|
---|
35 |
|
---|
36 | #include <winreg.h>
|
---|
37 |
|
---|
38 | #include <heapstring.h>
|
---|
39 | #include <misc.h>
|
---|
40 | #include <win\shell.h>
|
---|
41 | #include <win\winerror.h>
|
---|
42 | #include <winversion.h>
|
---|
43 | #include <winuser.h>
|
---|
44 |
|
---|
45 |
|
---|
46 | #define ICOM_CINTERFACE 1
|
---|
47 | #define CINTERFACE 1
|
---|
48 |
|
---|
49 | #include "winerror.h"
|
---|
50 | #include "winnls.h"
|
---|
51 | #include "winversion.h"
|
---|
52 | #include "heap.h"
|
---|
53 |
|
---|
54 | #include "shellapi.h"
|
---|
55 | #include "shlobj.h"
|
---|
56 | #include "wine/undocshell.h"
|
---|
57 |
|
---|
58 | #include "shlwapi.h"
|
---|
59 |
|
---|
60 |
|
---|
61 | /*****************************************************************************
|
---|
62 | * Local Variables *
|
---|
63 | *****************************************************************************/
|
---|
64 |
|
---|
65 | ODINDEBUGCHANNEL(SHLWAPI-ORDINAL)
|
---|
66 |
|
---|
67 |
|
---|
68 | /*****************************************************************************
|
---|
69 | * Prototypes *
|
---|
70 | *****************************************************************************/
|
---|
71 |
|
---|
72 | HANDLE WIN32API SHLWAPI_11(HANDLE, DWORD, DWORD, DWORD, DWORD);
|
---|
73 | DWORD WIN32API SHLWAPI_95(HWND, LPWSTR, int);
|
---|
74 |
|
---|
75 |
|
---|
76 | /*****************************************************************************
|
---|
77 | * Name : ???
|
---|
78 | * Purpose : Unknown (used by explorer.exe)
|
---|
79 | * Parameters: Unknown (wrong)
|
---|
80 | * Variables :
|
---|
81 | * Result : Unknown
|
---|
82 | * Remark :
|
---|
83 | * Status : UNTESTED STUB
|
---|
84 | *
|
---|
85 | * Author : Christoph Bratschi [Wed, 2000/03/29 19:47]
|
---|
86 | *****************************************************************************/
|
---|
87 |
|
---|
88 | ODINFUNCTION2(DWORD,SHLWAPI_1,
|
---|
89 | DWORD,arg0,
|
---|
90 | DWORD,arg1)
|
---|
91 | {
|
---|
92 | dprintf(("not implemented"));
|
---|
93 |
|
---|
94 | return 0;
|
---|
95 | }
|
---|
96 |
|
---|
97 |
|
---|
98 | /*****************************************************************************
|
---|
99 | * Name : ???
|
---|
100 | * Purpose : Unknown (used by explorer.exe)
|
---|
101 | * Parameters: Unknown (wrong)
|
---|
102 | * Variables :
|
---|
103 | * Result : Unknown
|
---|
104 | * Remark :
|
---|
105 | * Status : UNTESTED STUB
|
---|
106 | *
|
---|
107 | * Author : Christoph Bratschi [Wed, 2000/03/29 19:47]
|
---|
108 | *****************************************************************************/
|
---|
109 |
|
---|
110 | ODINFUNCTION2(DWORD,SHLWAPI_2,
|
---|
111 | DWORD,arg0,
|
---|
112 | DWORD,arg1)
|
---|
113 | {
|
---|
114 | dprintf(("not implemented"));
|
---|
115 |
|
---|
116 | return 0;
|
---|
117 | }
|
---|
118 |
|
---|
119 |
|
---|
120 | /*****************************************************************************
|
---|
121 | * Name : SHLWAPI_3
|
---|
122 | * Purpose :
|
---|
123 | * Parameters:
|
---|
124 | * Variables :
|
---|
125 | * Result :
|
---|
126 | * Remark :
|
---|
127 | * Status : UNTESTED
|
---|
128 | *
|
---|
129 | * Author : Patrick Haller [Sun, 2000/06/10 04:02]
|
---|
130 | *****************************************************************************/
|
---|
131 |
|
---|
132 | ODINFUNCTION2(BOOL, SHLWAPI_3,
|
---|
133 | LPSTR, lpPath,
|
---|
134 | LPSTR, lpFile)
|
---|
135 | {
|
---|
136 | dprintf(("not properly implemented"));
|
---|
137 |
|
---|
138 | return TRUE;
|
---|
139 |
|
---|
140 | #if 0
|
---|
141 | if (lpPath == NULL) return FALSE;
|
---|
142 | if (PathIsUNCServerA(lpPath)) return FALSE;
|
---|
143 | if (PathIsUNCServerShareA(lpPath)) return FALSE;
|
---|
144 |
|
---|
145 | if (lpFile == NULL)
|
---|
146 | return PathFileExistsA(lpPath);
|
---|
147 | else
|
---|
148 | {
|
---|
149 | // PathFindExtensionA
|
---|
150 | // lstrlenA
|
---|
151 | // lstrcpyA
|
---|
152 | // PathFileExistsA
|
---|
153 | return FALSE;
|
---|
154 | }
|
---|
155 |
|
---|
156 | return FALSE;
|
---|
157 | #endif
|
---|
158 | }
|
---|
159 |
|
---|
160 |
|
---|
161 | /*****************************************************************************
|
---|
162 | * Name : SHLWAPI_4
|
---|
163 | * Purpose :
|
---|
164 | * Parameters:
|
---|
165 | * Variables :
|
---|
166 | * Result :
|
---|
167 | * Remark :
|
---|
168 | * Status : UNTESTED
|
---|
169 | *
|
---|
170 | * Author : Patrick Haller [Sun, 2000/06/10 04:02]
|
---|
171 | *****************************************************************************/
|
---|
172 |
|
---|
173 | ODINFUNCTION2(BOOL, SHLWAPI_4,
|
---|
174 | LPWSTR, lpPath,
|
---|
175 | LPWSTR, lpFile)
|
---|
176 | {
|
---|
177 | dprintf(("not properly implemented"));
|
---|
178 |
|
---|
179 | return TRUE;
|
---|
180 |
|
---|
181 | #if 0
|
---|
182 | if (lpPath == NULL) return FALSE;
|
---|
183 | if (PathIsUNCServerW(lpPath)) return FALSE;
|
---|
184 | if (PathIsUNCServerShareW(lpPath)) return FALSE;
|
---|
185 |
|
---|
186 | if (lpFile == NULL)
|
---|
187 | return PathFileExtensionW(lpPath);
|
---|
188 | else
|
---|
189 | {
|
---|
190 | // PathFindExtensionW
|
---|
191 | // lstrlenW
|
---|
192 | // lstrcpyW
|
---|
193 | // PathFileExistsW
|
---|
194 | return FALSE;
|
---|
195 | }
|
---|
196 |
|
---|
197 | return FALSE;
|
---|
198 | #endif
|
---|
199 | }
|
---|
200 |
|
---|
201 |
|
---|
202 | /*****************************************************************************
|
---|
203 | * Name : ???
|
---|
204 | * Purpose : extended version of PathFindOnPathA
|
---|
205 | * Parameters: Unknown (wrong)
|
---|
206 | * Variables :
|
---|
207 | * Result : Unknown
|
---|
208 | * Remark :
|
---|
209 | * Status : UNTESTED STUB
|
---|
210 | *
|
---|
211 | * Author : Patrick Haller [Sun, 2000/06/09 04:47]
|
---|
212 | *****************************************************************************/
|
---|
213 |
|
---|
214 | ODINFUNCTION3(DWORD, SHLWAPI_5,
|
---|
215 | LPSTR, lpFile,
|
---|
216 | LPSTR, lpDirectories,
|
---|
217 | DWORD, dwUnknown)
|
---|
218 |
|
---|
219 | {
|
---|
220 | dprintf(("not implemented"));
|
---|
221 |
|
---|
222 | return 0;
|
---|
223 | }
|
---|
224 |
|
---|
225 |
|
---|
226 | /*****************************************************************************
|
---|
227 | * Name : ???
|
---|
228 | * Purpose : extended version of PathFindOnPathA
|
---|
229 | * Parameters: Unknown (wrong)
|
---|
230 | * Variables :
|
---|
231 | * Result : Unknown
|
---|
232 | * Remark :
|
---|
233 | * Status : UNTESTED STUB
|
---|
234 | *
|
---|
235 | * Author : Patrick Haller [Sun, 2000/06/09 04:47]
|
---|
236 | *****************************************************************************/
|
---|
237 |
|
---|
238 | ODINFUNCTION3(DWORD, SHLWAPI_6,
|
---|
239 | DWORD, arg0,
|
---|
240 | DWORD, arg1,
|
---|
241 | DWORD, arg2)
|
---|
242 |
|
---|
243 | {
|
---|
244 | dprintf(("not implemented"));
|
---|
245 |
|
---|
246 | return 0;
|
---|
247 | }
|
---|
248 |
|
---|
249 | /*****************************************************************************
|
---|
250 | * Name : ???
|
---|
251 | * Purpose : Unknown (used by explorer.exe)
|
---|
252 | * Parameters: Unknown (wrong)
|
---|
253 | * Variables :
|
---|
254 | * Result : Unknown
|
---|
255 | * Remark :
|
---|
256 | * Status : UNTESTED STUB
|
---|
257 | *
|
---|
258 | * Author : Patrick Haller [Sun, 2000/06/09 04:47]
|
---|
259 | *****************************************************************************/
|
---|
260 |
|
---|
261 | ODINFUNCTION3(DWORD,SHLWAPI_7,
|
---|
262 | DWORD, arg0,
|
---|
263 | DWORD, arg1,
|
---|
264 | DWORD, arg2)
|
---|
265 | {
|
---|
266 | HANDLE hMap;
|
---|
267 | LPVOID lpMap;
|
---|
268 | DWORD dwResult;
|
---|
269 |
|
---|
270 | dprintf(("not implemented"));
|
---|
271 |
|
---|
272 | // create mapping
|
---|
273 | hMap = CreateFileMappingA(-1,
|
---|
274 | NULL,
|
---|
275 | PAGE_READWRITE,
|
---|
276 | 0,
|
---|
277 | arg1,
|
---|
278 | 0);
|
---|
279 | if (hMap == NULL)
|
---|
280 | return FALSE;
|
---|
281 |
|
---|
282 | // now map the thing
|
---|
283 | lpMap = MapViewOfFile(hMap,
|
---|
284 | FILE_MAP_READ | FILE_MAP_WRITE,
|
---|
285 | 0,
|
---|
286 | 0,
|
---|
287 | 0);
|
---|
288 | if (lpMap == NULL)
|
---|
289 | {
|
---|
290 | CloseHandle(hMap);
|
---|
291 | return FALSE;
|
---|
292 | }
|
---|
293 |
|
---|
294 | /* @@@PH copy someting into the shared segment */
|
---|
295 |
|
---|
296 | UnmapViewOfFile(lpMap);
|
---|
297 | dwResult = SHLWAPI_11(hMap,
|
---|
298 | GetCurrentProcessId(),
|
---|
299 | arg2,
|
---|
300 | FILE_MAP_ALL_ACCESS,
|
---|
301 | 2);
|
---|
302 | CloseHandle(hMap);
|
---|
303 |
|
---|
304 | return dwResult;
|
---|
305 | }
|
---|
306 |
|
---|
307 |
|
---|
308 | /*****************************************************************************
|
---|
309 | * Name : ???
|
---|
310 | * Purpose : Unknown (used by explorer.exe)
|
---|
311 | * Parameters: Unknown (wrong)
|
---|
312 | * Variables :
|
---|
313 | * Result : Unknown
|
---|
314 | * Remark :
|
---|
315 | * Status : UNTESTED STUB
|
---|
316 | *
|
---|
317 | * Author : Patrick Haller [Sun, 2000/06/09 04:47]
|
---|
318 | *****************************************************************************/
|
---|
319 |
|
---|
320 | ODINFUNCTION2(DWORD, SHLWAPI_8,
|
---|
321 | HANDLE, hMap,
|
---|
322 | DWORD, arg1)
|
---|
323 | {
|
---|
324 | HANDLE hHandle;
|
---|
325 | LPVOID lpBase;
|
---|
326 |
|
---|
327 | hHandle = SHLWAPI_11(hMap,
|
---|
328 | arg1,
|
---|
329 | GetCurrentProcessId(),
|
---|
330 | FILE_MAP_ALL_ACCESS,
|
---|
331 | 0);
|
---|
332 | lpBase = MapViewOfFile(hHandle,
|
---|
333 | FILE_MAP_READ | FILE_MAP_WRITE,
|
---|
334 | 0,
|
---|
335 | 0,
|
---|
336 | 0);
|
---|
337 | CloseHandle(hHandle);
|
---|
338 |
|
---|
339 | if (lpBase == NULL)
|
---|
340 | return NULL;
|
---|
341 | else
|
---|
342 | return (DWORD)lpBase+4; // lea eax, [ebx + 4]
|
---|
343 | }
|
---|
344 |
|
---|
345 |
|
---|
346 | /*****************************************************************************
|
---|
347 | * Name :
|
---|
348 | * Purpose :
|
---|
349 | * Parameters:
|
---|
350 | * Variables :
|
---|
351 | * Result :
|
---|
352 | * Remark :
|
---|
353 | * Status : UNTESTED
|
---|
354 | *
|
---|
355 | * Author : Patrick Haller [Sun, 2000/06/09 04:47]
|
---|
356 | *****************************************************************************/
|
---|
357 |
|
---|
358 | ODINFUNCTION1(DWORD, SHLWAPI_9,
|
---|
359 | LPBYTE, lpBase)
|
---|
360 | {
|
---|
361 | return (UnmapViewOfFile( (LPVOID) ((DWORD)lpBase & 0xFFFFFFFC)) );
|
---|
362 | }
|
---|
363 |
|
---|
364 |
|
---|
365 | /*****************************************************************************
|
---|
366 | * Name : ???
|
---|
367 | * Purpose :
|
---|
368 | * Parameters:
|
---|
369 | * Variables :
|
---|
370 | * Result :
|
---|
371 | * Remark :
|
---|
372 | * Status : UNTESTED
|
---|
373 | *
|
---|
374 | * Author : Patrick Haller [Sun, 2000/06/09 04:47]
|
---|
375 | *****************************************************************************/
|
---|
376 |
|
---|
377 | ODINFUNCTION2(DWORD, SHLWAPI_10,
|
---|
378 | HANDLE, hMap,
|
---|
379 | DWORD, arg1)
|
---|
380 | {
|
---|
381 | HANDLE hHandle;
|
---|
382 |
|
---|
383 | hHandle = SHLWAPI_11(hMap,
|
---|
384 | arg1,
|
---|
385 | GetCurrentProcessId(),
|
---|
386 | FILE_MAP_ALL_ACCESS,
|
---|
387 | 1);
|
---|
388 | return CloseHandle(hHandle);
|
---|
389 | }
|
---|
390 |
|
---|
391 |
|
---|
392 | /*****************************************************************************
|
---|
393 | * Name :
|
---|
394 | * Purpose : Duplicate the handle to the shell shared segment
|
---|
395 | * Parameters:
|
---|
396 | * Variables :
|
---|
397 | * Result :
|
---|
398 | * Remark : SHLWAPI.11 - wrong implementation, check again
|
---|
399 | * Status : UNTESTED STUB
|
---|
400 | *
|
---|
401 | * Author : Patrick Haller [Sun, 2000/06/09 04:47]
|
---|
402 | *****************************************************************************/
|
---|
403 |
|
---|
404 | ODINFUNCTION5(HANDLE, SHLWAPI_11,
|
---|
405 | HANDLE, hMap,
|
---|
406 | DWORD, dwProcessDest,
|
---|
407 | DWORD, dwCurrentPID,
|
---|
408 | DWORD, dwAccess,
|
---|
409 | DWORD, dwFlag)
|
---|
410 | {
|
---|
411 | dprintf(("not implemented, explorer.exe will trap now"));
|
---|
412 |
|
---|
413 | DWORD dwMyPID = GetCurrentProcessId();
|
---|
414 | HANDLE hProcess;
|
---|
415 | HANDLE hTargetHandle;
|
---|
416 | HANDLE hTargetProcessHandle = dwProcessDest;
|
---|
417 | BOOL fResult;
|
---|
418 |
|
---|
419 | // open desired process
|
---|
420 | if (dwMyPID == dwProcessDest)
|
---|
421 | hProcess == GetCurrentProcess();
|
---|
422 | else
|
---|
423 | hProcess == OpenProcess(PROCESS_DUP_HANDLE,
|
---|
424 | FALSE,
|
---|
425 | dwProcessDest);
|
---|
426 |
|
---|
427 | // verify result
|
---|
428 | if (hProcess == NULL)
|
---|
429 | return 0;
|
---|
430 |
|
---|
431 | // duplicate handle
|
---|
432 | fResult = DuplicateHandle(hProcess,
|
---|
433 | hMap,
|
---|
434 | hTargetProcessHandle,
|
---|
435 | &hTargetHandle,
|
---|
436 | dwAccess,
|
---|
437 | 0,
|
---|
438 | dwFlag | 0x02);
|
---|
439 | //CloseHandle()
|
---|
440 |
|
---|
441 | return fResult;
|
---|
442 | }
|
---|
443 |
|
---|
444 |
|
---|
445 | /*****************************************************************************
|
---|
446 | * Name : ???
|
---|
447 | * Purpose : Looks like a strdup()
|
---|
448 | * Parameters: Unknown (wrong)
|
---|
449 | * Variables :
|
---|
450 | * Result : Unknown
|
---|
451 | * Remark :
|
---|
452 | * Status : UNTESTED STUB
|
---|
453 | *
|
---|
454 | * Author : Patrick Haller [Sun, 2000/06/09 04:47]
|
---|
455 | *****************************************************************************/
|
---|
456 |
|
---|
457 | ODINFUNCTION2(DWORD,SHLWAPI_12,
|
---|
458 | DWORD,arg0,
|
---|
459 | DWORD,arg1)
|
---|
460 | {
|
---|
461 | dprintf(("not implemented, explorer.exe will trap now"));
|
---|
462 |
|
---|
463 | return 0;
|
---|
464 | }
|
---|
465 |
|
---|
466 |
|
---|
467 | /*****************************************************************************
|
---|
468 | * Name : ???
|
---|
469 | * Purpose : Unknown (used by explorer.exe)
|
---|
470 | * Parameters:
|
---|
471 | * Variables :
|
---|
472 | * Result : Unknown
|
---|
473 | * Remark :
|
---|
474 | * Status : UNTESTED STUB
|
---|
475 | *
|
---|
476 | * Author : Patrick Haller [Sun, 2000/06/09 04:47]
|
---|
477 | *****************************************************************************/
|
---|
478 |
|
---|
479 | ODINFUNCTION2(DWORD,SHLWAPI_13,
|
---|
480 | DWORD, arg0,
|
---|
481 | DWORD, arg1)
|
---|
482 | {
|
---|
483 | dprintf(("not implemented, explorer.exe will trap now"));
|
---|
484 |
|
---|
485 | return 0;
|
---|
486 | }
|
---|
487 |
|
---|
488 |
|
---|
489 | /*****************************************************************************
|
---|
490 | * Name : ???
|
---|
491 | * Purpose : Unknown (used by explorer.exe)
|
---|
492 | * Parameters: Unknown (wrong)
|
---|
493 | * Variables :
|
---|
494 | * Result : Unknown
|
---|
495 | * Remark :
|
---|
496 | * Status : UNTESTED STUB
|
---|
497 | *
|
---|
498 | * Author : Patrick Haller [Sun, 2000/06/09 04:47]
|
---|
499 | *****************************************************************************/
|
---|
500 |
|
---|
501 | ODINFUNCTION2(DWORD,SHLWAPI_14,
|
---|
502 | DWORD, arg0,
|
---|
503 | DWORD, arg1)
|
---|
504 | {
|
---|
505 | dprintf(("not implemented, explorer.exe will trap now"));
|
---|
506 |
|
---|
507 | return 0;
|
---|
508 | }
|
---|
509 |
|
---|
510 |
|
---|
511 | /*****************************************************************************
|
---|
512 | * Name : ???
|
---|
513 | * Purpose : Unknown (used by explorer.exe)
|
---|
514 | * Parameters: Unknown (wrong)
|
---|
515 | * Variables :
|
---|
516 | * Result : Unknown
|
---|
517 | * Remark :
|
---|
518 | * Status : UNTESTED STUB
|
---|
519 | *
|
---|
520 | * Author : Patrick Haller [Sun, 2000/06/09 04:47]
|
---|
521 | *****************************************************************************/
|
---|
522 |
|
---|
523 | ODINFUNCTION2(DWORD,SHLWAPI_15,
|
---|
524 | DWORD, arg0,
|
---|
525 | DWORD, arg1)
|
---|
526 | {
|
---|
527 | dprintf(("not implemented, explorer.exe will trap now"));
|
---|
528 |
|
---|
529 | return 0;
|
---|
530 | }
|
---|
531 |
|
---|
532 |
|
---|
533 | /*****************************************************************************
|
---|
534 | * Name : ???
|
---|
535 | * Purpose : Unknown (used by explorer.exe)
|
---|
536 | * Parameters: Unknown (wrong)
|
---|
537 | * Variables :
|
---|
538 | * Result : Unknown
|
---|
539 | * Remark : SHLWAPI.16
|
---|
540 | * Status : UNTESTED STUB
|
---|
541 | *
|
---|
542 | * Author : Patrick Haller [Sun, 2000/06/09 04:47]
|
---|
543 | *****************************************************************************/
|
---|
544 |
|
---|
545 | ODINFUNCTION4(HANDLE,SHCreateThread,
|
---|
546 | DWORD, arg0,
|
---|
547 | DWORD, arg1,
|
---|
548 | DWORD, arg2,
|
---|
549 | DWORD, arg3)
|
---|
550 | {
|
---|
551 | dprintf(("not implemented, explorer.exe will trap now"));
|
---|
552 |
|
---|
553 | return 0;
|
---|
554 | }
|
---|
555 |
|
---|
556 |
|
---|
557 |
|
---|
558 | /*****************************************************************************
|
---|
559 | * Name : SHLWAPI_23
|
---|
560 | * Purpose :
|
---|
561 | * Parameters:
|
---|
562 | * Variables :
|
---|
563 | * Result :
|
---|
564 | * Remark :
|
---|
565 | * Status : UNTESTED STUB
|
---|
566 | *
|
---|
567 | * Author : Patrick Haller [Sun, 2000/06/10 04:02]
|
---|
568 | *****************************************************************************/
|
---|
569 |
|
---|
570 | ODINFUNCTION3(DWORD,SHLWAPI_23,
|
---|
571 | DWORD,arg0,
|
---|
572 | DWORD,arg1,
|
---|
573 | DWORD,arg2)
|
---|
574 | {
|
---|
575 | dprintf(("not yet implemented"));
|
---|
576 |
|
---|
577 | return 0;
|
---|
578 | }
|
---|
579 |
|
---|
580 |
|
---|
581 | /*****************************************************************************
|
---|
582 | * Name : SHLWAPI_28
|
---|
583 | * Purpose :
|
---|
584 | * Parameters:
|
---|
585 | * Variables :
|
---|
586 | * Result :
|
---|
587 | * Remark :
|
---|
588 | * Status : UNTESTED STUB
|
---|
589 | *
|
---|
590 | * Author : Patrick Haller [Sun, 2000/06/10 04:02]
|
---|
591 | *****************************************************************************/
|
---|
592 |
|
---|
593 | ODINFUNCTION1(DWORD,SHLWAPI_28,
|
---|
594 | DWORD,arg0)
|
---|
595 | {
|
---|
596 | dprintf(("not yet implemented"));
|
---|
597 |
|
---|
598 | return 0;
|
---|
599 | }
|
---|
600 |
|
---|
601 |
|
---|
602 | /*****************************************************************************
|
---|
603 | * Name : LRESULT CallWindowProcAW
|
---|
604 | * Purpose :
|
---|
605 | * Parameters:
|
---|
606 | * Variables :
|
---|
607 | * Result :
|
---|
608 | * Remark : SHLWAPI.37
|
---|
609 | * Status : UNTESTED
|
---|
610 | *
|
---|
611 | * Author : Patrick Haller [Sun, 2000/06/10 04:02]
|
---|
612 | *****************************************************************************/
|
---|
613 |
|
---|
614 | ODINFUNCTION5(LRESULT, CallWindowProcAW,
|
---|
615 | WNDPROC, lpPrevWndFunc,
|
---|
616 | HWND, hWnd,
|
---|
617 | UINT, Msg,
|
---|
618 | WPARAM, wParam,
|
---|
619 | LPARAM, lParam)
|
---|
620 | {
|
---|
621 | if (VERSION_OsIsUnicode())
|
---|
622 | return CallWindowProcW(lpPrevWndFunc, hWnd, Msg, wParam, lParam);
|
---|
623 | else
|
---|
624 | return CallWindowProcA(lpPrevWndFunc, hWnd, Msg, wParam, lParam);
|
---|
625 | }
|
---|
626 |
|
---|
627 |
|
---|
628 | /*****************************************************************************
|
---|
629 | * Name : SHLWAPI_38
|
---|
630 | * Purpose :
|
---|
631 | * Parameters:
|
---|
632 | * Variables :
|
---|
633 | * Result :
|
---|
634 | * Remark :
|
---|
635 | * Status : UNTESTED STUB
|
---|
636 | *
|
---|
637 | * Author : Patrick Haller [Sun, 2000/06/10 04:02]
|
---|
638 | *****************************************************************************/
|
---|
639 |
|
---|
640 | ODINFUNCTION1(DWORD,SHLWAPI_38,
|
---|
641 | DWORD,arg0)
|
---|
642 | {
|
---|
643 | dprintf(("not yet implemented"));
|
---|
644 |
|
---|
645 | return 0;
|
---|
646 | }
|
---|
647 |
|
---|
648 |
|
---|
649 | /*****************************************************************************
|
---|
650 | * Name : SHLWAPI_40
|
---|
651 | * Purpose : looks like CharNextW
|
---|
652 | * Parameters:
|
---|
653 | * Variables :
|
---|
654 | * Result :
|
---|
655 | * Remark :
|
---|
656 | * Status : UNTESTED
|
---|
657 | *
|
---|
658 | * Author : Patrick Haller [Sun, 2000/06/10 04:02]
|
---|
659 | *****************************************************************************/
|
---|
660 |
|
---|
661 | ODINFUNCTION1(LPWSTR, SHLWAPI_40,
|
---|
662 | LPWSTR, lpChar)
|
---|
663 | {
|
---|
664 | if (*lpChar == 0)
|
---|
665 | return lpChar;
|
---|
666 | else
|
---|
667 | return lpChar++;
|
---|
668 | }
|
---|
669 |
|
---|
670 |
|
---|
671 | /*****************************************************************************
|
---|
672 | * Name : SHLWAPI_43
|
---|
673 | * Purpose :
|
---|
674 | * Parameters:
|
---|
675 | * Variables :
|
---|
676 | * Result :
|
---|
677 | * Remark :
|
---|
678 | * Status : UNTESTED STUB
|
---|
679 | *
|
---|
680 | * Author : Patrick Haller [Sun, 2000/06/10 04:02]
|
---|
681 | *****************************************************************************/
|
---|
682 |
|
---|
683 | ODINFUNCTION1(DWORD,SHLWAPI_43,
|
---|
684 | DWORD,arg0)
|
---|
685 | {
|
---|
686 | dprintf(("not yet implemented"));
|
---|
687 |
|
---|
688 | return 0;
|
---|
689 | }
|
---|
690 |
|
---|
691 |
|
---|
692 | /*****************************************************************************
|
---|
693 | * Name : SHLWAPI_53
|
---|
694 | * Purpose : Character base independend CreateFontIndirect
|
---|
695 | * Parameters:
|
---|
696 | * Variables :
|
---|
697 | * Result :
|
---|
698 | * Remark :
|
---|
699 | * Status : UNTESTED
|
---|
700 | *
|
---|
701 | * Author : Patrick Haller [Sun, 2000/06/10 04:02]
|
---|
702 | *****************************************************************************/
|
---|
703 |
|
---|
704 | ODINFUNCTION1(DWORD, SHLWAPI_53,
|
---|
705 | CONST LOGFONTW *, lplf)
|
---|
706 | {
|
---|
707 | if (VERSION_OsIsUnicode())
|
---|
708 | return CreateFontIndirectW(lplf);
|
---|
709 | else
|
---|
710 | {
|
---|
711 | // Original:
|
---|
712 | // convert lplf to LOGFONTA
|
---|
713 | // call CreateFontIndirectA
|
---|
714 | return CreateFontIndirectW(lplf);
|
---|
715 | }
|
---|
716 | }
|
---|
717 |
|
---|
718 |
|
---|
719 | /*****************************************************************************
|
---|
720 | * Name : LRESULT sDefWindowProcAW
|
---|
721 | * Purpose :
|
---|
722 | * Parameters:
|
---|
723 | * Variables :
|
---|
724 | * Result :
|
---|
725 | * Remark : SHLWAPI.56 - this procedure has static unicode behaviour
|
---|
726 | * Status : UNTESTED
|
---|
727 | *
|
---|
728 | * Author : Patrick Haller [Sun, 2000/06/10 04:02]
|
---|
729 | *****************************************************************************/
|
---|
730 |
|
---|
731 | ODINFUNCTION4(LRESULT, sDefWindowProcAW,
|
---|
732 | HWND, hWnd,
|
---|
733 | UINT, Msg,
|
---|
734 | WPARAM, wParam,
|
---|
735 | LPARAM, lParam)
|
---|
736 | {
|
---|
737 | if (VERSION_OsIsUnicode())
|
---|
738 | return DefWindowProcW(hWnd, Msg, wParam, lParam);
|
---|
739 | else
|
---|
740 | return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
---|
741 | }
|
---|
742 |
|
---|
743 |
|
---|
744 | /*****************************************************************************
|
---|
745 | * Name : SHLWAPI_59
|
---|
746 | * Purpose : DialogBoxParamAW
|
---|
747 | * Parameters:
|
---|
748 | * Variables :
|
---|
749 | * Result :
|
---|
750 | * Remark :
|
---|
751 | * Status : UNTESTED
|
---|
752 | *
|
---|
753 | * Author : Patrick Haller [Sun, 2000/06/10 04:02]
|
---|
754 | *****************************************************************************/
|
---|
755 |
|
---|
756 | ODINFUNCTION5(DWORD, SHLWAPI_59,
|
---|
757 | HINSTANCE, hInstance,
|
---|
758 | LPCSTR, lpTemplateName,
|
---|
759 | HWND, hWndParent,
|
---|
760 | DLGPROC, lpDialogFunc,
|
---|
761 | LPARAM, dwInitParam)
|
---|
762 | {
|
---|
763 | // PH Note: originally, here are some heavy hooks into Internet Explorer
|
---|
764 | // and tons of language support stuff.
|
---|
765 |
|
---|
766 | if (VERSION_OsIsUnicode())
|
---|
767 | return DialogBoxParamW(hInstance,
|
---|
768 | (LPCWSTR)lpTemplateName,
|
---|
769 | hWndParent,
|
---|
770 | lpDialogFunc,
|
---|
771 | dwInitParam);
|
---|
772 | else
|
---|
773 | return DialogBoxParamA(hInstance,
|
---|
774 | lpTemplateName,
|
---|
775 | hWndParent,
|
---|
776 | lpDialogFunc,
|
---|
777 | dwInitParam);
|
---|
778 | }
|
---|
779 |
|
---|
780 |
|
---|
781 | /*****************************************************************************
|
---|
782 | * Name : LONG DispatchMessage
|
---|
783 | * Purpose :
|
---|
784 | * Parameters:
|
---|
785 | * Variables :
|
---|
786 | * Result :
|
---|
787 | * Remark : SHLWAPI.60
|
---|
788 | * Status : UNTESTED
|
---|
789 | *
|
---|
790 | * Author : Patrick Haller [Sun, 2000/06/10 04:02]
|
---|
791 | *****************************************************************************/
|
---|
792 |
|
---|
793 | ODINFUNCTION1(LONG, DispatchMessageAW,
|
---|
794 | const MSG*, lpmsg)
|
---|
795 | {
|
---|
796 | if (VERSION_OsIsUnicode())
|
---|
797 | return DispatchMessageW(lpmsg);
|
---|
798 | else
|
---|
799 | return DispatchMessageA(lpmsg);
|
---|
800 | }
|
---|
801 |
|
---|
802 |
|
---|
803 | /*****************************************************************************
|
---|
804 | * Name : SHLWAPI_74
|
---|
805 | * Purpose : Sort of GetDlgItemText
|
---|
806 | * Parameters:
|
---|
807 | * Variables :
|
---|
808 | * Result :
|
---|
809 | * Remark :
|
---|
810 | * Status : UNTESTED
|
---|
811 | *
|
---|
812 | * Author : Patrick Haller [Sun, 2000/06/10 04:02]
|
---|
813 | *****************************************************************************/
|
---|
814 |
|
---|
815 | ODINFUNCTION4(DWORD, SHLWAPI_74,
|
---|
816 | HWND, hDlg,
|
---|
817 | int, nIDDlgItem,
|
---|
818 | LPWSTR, lpText,
|
---|
819 | int, nMaxCount)
|
---|
820 | {
|
---|
821 | HWND hwndItem = GetDlgItem(hDlg,
|
---|
822 | nIDDlgItem);
|
---|
823 | if (hwndItem == NULL)
|
---|
824 | {
|
---|
825 | if (nMaxCount != 0) // PH Note: bug in original windows code
|
---|
826 | *lpText = 0;
|
---|
827 |
|
---|
828 | return NULL;
|
---|
829 | }
|
---|
830 |
|
---|
831 | // else retrieve the text
|
---|
832 | return SHLWAPI_95(hwndItem,
|
---|
833 | lpText,
|
---|
834 | nMaxCount);
|
---|
835 | }
|
---|
836 |
|
---|
837 |
|
---|
838 | /*****************************************************************************
|
---|
839 | * Name : HMODULE GetModuleHandleAW
|
---|
840 | * Purpose :
|
---|
841 | * Parameters:
|
---|
842 | * Variables :
|
---|
843 | * Result :
|
---|
844 | * Remark : SHLWAPI.83 - check back with original code, result may be wrong
|
---|
845 | * Status : UNTESTED
|
---|
846 | *
|
---|
847 | * Author : Patrick Haller [Sun, 2000/06/10 04:02]
|
---|
848 | *****************************************************************************/
|
---|
849 |
|
---|
850 | ODINFUNCTION1(HMODULE, GetModuleHandleAW,
|
---|
851 | LPWSTR, lpModuleName)
|
---|
852 | {
|
---|
853 | if (VERSION_OsIsUnicode())
|
---|
854 | return GetModuleHandleW(lpModuleName);
|
---|
855 | else
|
---|
856 | {
|
---|
857 | dprintf(("error: unicode to ascii conversion missing"));
|
---|
858 | return GetModuleHandleA((LPSTR)lpModuleName);
|
---|
859 | }
|
---|
860 | }
|
---|
861 |
|
---|
862 |
|
---|
863 | /*****************************************************************************
|
---|
864 | * Name : LONG GetWindowLongAW
|
---|
865 | * Purpose :
|
---|
866 | * Parameters:
|
---|
867 | * Variables :
|
---|
868 | * Result :
|
---|
869 | * Remark : SHLWAPI.94
|
---|
870 | * Status : UNTESTED
|
---|
871 | *
|
---|
872 | * Author : Patrick Haller [Sun, 2000/06/10 04:02]
|
---|
873 | *****************************************************************************/
|
---|
874 |
|
---|
875 | ODINFUNCTION2(LONG, GetWindowLongAW,
|
---|
876 | HWND, hWnd,
|
---|
877 | int, nIndex)
|
---|
878 | {
|
---|
879 | if (VERSION_OsIsUnicode())
|
---|
880 | return GetWindowLongW(hWnd, nIndex);
|
---|
881 | else
|
---|
882 | return GetWindowLongA(hWnd, nIndex);
|
---|
883 | }
|
---|
884 |
|
---|
885 |
|
---|
886 | /*****************************************************************************
|
---|
887 | * Name : SHLWAPI_95
|
---|
888 | * Purpose :
|
---|
889 | * Parameters:
|
---|
890 | * Variables :
|
---|
891 | * Result :
|
---|
892 | * Remark :
|
---|
893 | * Status : UNTESTED
|
---|
894 | *
|
---|
895 | * Author : Patrick Haller [Sun, 2000/06/10 04:02]
|
---|
896 | *****************************************************************************/
|
---|
897 |
|
---|
898 | ODINFUNCTION3(DWORD, SHLWAPI_95,
|
---|
899 | HWND, hwndItem,
|
---|
900 | LPWSTR, lpText,
|
---|
901 | int, nMaxCount)
|
---|
902 | {
|
---|
903 | dprintf(("not properly implemented.\n"));
|
---|
904 |
|
---|
905 | // @@@PH too simple, original deals with some properties and stuff
|
---|
906 | if (VERSION_OsIsUnicode())
|
---|
907 | return GetWindowTextW(hwndItem,
|
---|
908 | lpText,
|
---|
909 | nMaxCount);
|
---|
910 | else
|
---|
911 | {
|
---|
912 | // @@@PH unicode conversion is missing
|
---|
913 | return GetWindowTextA(hwndItem,
|
---|
914 | (LPSTR)lpText,
|
---|
915 | nMaxCount);
|
---|
916 | }
|
---|
917 | }
|
---|
918 |
|
---|
919 |
|
---|
920 | /*****************************************************************************
|
---|
921 | * Name : HCURSOR LoadCursorAW
|
---|
922 | * Purpose :
|
---|
923 | * Parameters:
|
---|
924 | * Variables :
|
---|
925 | * Result :
|
---|
926 | * Remark : SHLWAPI.102
|
---|
927 | * Status : UNTESTED
|
---|
928 | *
|
---|
929 | * Author : Patrick Haller [Sun, 2000/06/10 04:02]
|
---|
930 | *****************************************************************************/
|
---|
931 |
|
---|
932 | ODINFUNCTION2(HCURSOR, LoadCursorAW,
|
---|
933 | HINSTANCE, hInstance,
|
---|
934 | LPCSTR, lpCursorName)
|
---|
935 | {
|
---|
936 | if (VERSION_OsIsUnicode())
|
---|
937 | return LoadCursorW(hInstance, (LPCWSTR)lpCursorName);
|
---|
938 | else
|
---|
939 | return LoadCursorA(hInstance, lpCursorName);
|
---|
940 | }
|
---|
941 |
|
---|
942 |
|
---|
943 | /*****************************************************************************
|
---|
944 | * Name : BOOL PeekMessageAW
|
---|
945 | * Purpose :
|
---|
946 | * Parameters:
|
---|
947 | * Variables :
|
---|
948 | * Result :
|
---|
949 | * Remark : SHLWAPI.116
|
---|
950 | * Status : UNTESTED
|
---|
951 | *
|
---|
952 | * Author : Patrick Haller [Sun, 2000/06/10 04:02]
|
---|
953 | *****************************************************************************/
|
---|
954 |
|
---|
955 | ODINFUNCTION5(BOOL, PeekMessageAW,
|
---|
956 | LPMSG, lpMsg,
|
---|
957 | HWND, hWnd,
|
---|
958 | UINT, uMsgFilterMin,
|
---|
959 | UINT, uMsgFilterMax,
|
---|
960 | UINT, wRemoveMsg)
|
---|
961 | {
|
---|
962 | if (VERSION_OsIsUnicode())
|
---|
963 | return PeekMessageW(lpMsg, hWnd, uMsgFilterMin, uMsgFilterMax, wRemoveMsg);
|
---|
964 | else
|
---|
965 | return PeekMessageA(lpMsg, hWnd, uMsgFilterMin, uMsgFilterMax, wRemoveMsg);
|
---|
966 | }
|
---|
967 |
|
---|
968 |
|
---|
969 | /*****************************************************************************
|
---|
970 | * Name : BOOL PostMessageAW
|
---|
971 | * Purpose :
|
---|
972 | * Parameters:
|
---|
973 | * Variables :
|
---|
974 | * Result :
|
---|
975 | * Remark : SHLWAPI.117
|
---|
976 | * Status : UNTESTED
|
---|
977 | *
|
---|
978 | * Author : Patrick Haller [Sun, 2000/06/10 04:02]
|
---|
979 | *****************************************************************************/
|
---|
980 |
|
---|
981 | ODINFUNCTION4(BOOL, PostMessageAW,
|
---|
982 | HWND, hWnd,
|
---|
983 | UINT, Msg,
|
---|
984 | WPARAM, wParam,
|
---|
985 | LPARAM, lParam)
|
---|
986 | {
|
---|
987 | if (VERSION_OsIsUnicode())
|
---|
988 | return PostMessageW(hWnd, Msg, wParam, lParam);
|
---|
989 | else
|
---|
990 | return PostMessageA(hWnd, Msg, wParam, lParam);
|
---|
991 | }
|
---|
992 |
|
---|
993 |
|
---|
994 | /*****************************************************************************
|
---|
995 | * Name : DWORD SHLWAPI_158
|
---|
996 | * Purpose : Case-ignoring wide string compare
|
---|
997 | * Parameters: LPSTR lpStr1
|
---|
998 | * LPSTR lpStr2
|
---|
999 | * Variables :
|
---|
1000 | * Result : case-insensitive comparsion result between the two strings
|
---|
1001 | * Remark : SHLWAPI.158
|
---|
1002 | * Status : UNTESTED
|
---|
1003 | *
|
---|
1004 | * Author : Patrick Haller [Sun, 2000/06/10 04:02]
|
---|
1005 | *****************************************************************************/
|
---|
1006 |
|
---|
1007 | ODINFUNCTION2(int, SHLWAPI_158,
|
---|
1008 | LPWSTR, lpStr1,
|
---|
1009 | LPWSTR, lpStr2)
|
---|
1010 | {
|
---|
1011 | WCHAR ch1;
|
---|
1012 | WCHAR ch2;
|
---|
1013 | int res;
|
---|
1014 |
|
---|
1015 | for (;
|
---|
1016 |
|
---|
1017 | *lpStr1 != 0;
|
---|
1018 |
|
---|
1019 | lpStr1++,
|
---|
1020 | lpStr2++)
|
---|
1021 | {
|
---|
1022 | ch1 = *lpStr1;
|
---|
1023 | ch2 = *lpStr2;
|
---|
1024 |
|
---|
1025 | /* ignore case of characters */
|
---|
1026 | if ( (ch1 >= 'A') && (ch1 <= 'Z')) ch1 += 0x20;
|
---|
1027 | if ( (ch2 >= 'A') && (ch2 <= 'Z')) ch1 += 0x20;
|
---|
1028 |
|
---|
1029 | /* compare characters */
|
---|
1030 | res = ch1 - ch2;
|
---|
1031 | if (res)
|
---|
1032 | return res;
|
---|
1033 | }
|
---|
1034 |
|
---|
1035 | /* OK, strings compared til end of string1 */
|
---|
1036 | return 0;
|
---|
1037 | }
|
---|
1038 |
|
---|
1039 |
|
---|
1040 | /*****************************************************************************
|
---|
1041 | * Name : BOOL SHLWAPI_197
|
---|
1042 | * Purpose : Set text background?
|
---|
1043 | * Parameters:
|
---|
1044 | * Variables :
|
---|
1045 | * Result :
|
---|
1046 | * Remark : SHLWAPI.197
|
---|
1047 | * Status : UNTESTED
|
---|
1048 | *
|
---|
1049 | * Author : Patrick Haller [Sun, 2000/06/10 04:02]
|
---|
1050 | *****************************************************************************/
|
---|
1051 |
|
---|
1052 | ODINFUNCTION3(BOOL, SHLWAPI_197,
|
---|
1053 | HDC, hdc,
|
---|
1054 | CONST RECT*, lprc,
|
---|
1055 | COLORREF, crColor)
|
---|
1056 | {
|
---|
1057 | COLORREF crOld;
|
---|
1058 | BOOL res;
|
---|
1059 |
|
---|
1060 | crOld = SetBkColor(hdc, crColor);
|
---|
1061 | res = ExtTextOutA(hdc,
|
---|
1062 | 0,
|
---|
1063 | 0,
|
---|
1064 | ETO_OPAQUE,
|
---|
1065 | lprc,
|
---|
1066 | 0,
|
---|
1067 | 0,
|
---|
1068 | 0);
|
---|
1069 | SetBkColor(hdc, crOld);
|
---|
1070 |
|
---|
1071 | return res;
|
---|
1072 | }
|
---|
1073 |
|
---|
1074 |
|
---|
1075 | /*****************************************************************************
|
---|
1076 | * Name : LRESULT DefWindowProcAW
|
---|
1077 | * Purpose :
|
---|
1078 | * Parameters:
|
---|
1079 | * Variables :
|
---|
1080 | * Result :
|
---|
1081 | * Remark : SHLWAPI.240 - this version has dynamic unicode behaviour
|
---|
1082 | * Status : UNTESTED
|
---|
1083 | *
|
---|
1084 | * Author : Patrick Haller [Sun, 2000/06/10 04:02]
|
---|
1085 | *****************************************************************************/
|
---|
1086 |
|
---|
1087 | ODINFUNCTION4(LRESULT, DefWindowProcAW,
|
---|
1088 | HWND, hWnd,
|
---|
1089 | UINT, Msg,
|
---|
1090 | WPARAM, wParam,
|
---|
1091 | LPARAM, lParam)
|
---|
1092 | {
|
---|
1093 | if (IsWindowUnicode(hWnd))
|
---|
1094 | return DefWindowProcW(hWnd, Msg, wParam, lParam);
|
---|
1095 | else
|
---|
1096 | return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
---|
1097 | }
|
---|