source: trunk/src/shlwapi/ordinal.cpp@ 3684

Last change on this file since 3684 was 3684, checked in by phaller, 25 years ago

Updated numerous functions

File size: 27.3 KB
Line 
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
65ODINDEBUGCHANNEL(SHLWAPI-ORDINAL)
66
67
68/*****************************************************************************
69 * Prototypes *
70 *****************************************************************************/
71
72HANDLE WIN32API SHLWAPI_11(HANDLE, DWORD, DWORD, DWORD, DWORD);
73DWORD 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
88ODINFUNCTION2(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
110ODINFUNCTION2(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
132ODINFUNCTION2(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
173ODINFUNCTION2(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
214ODINFUNCTION3(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
238ODINFUNCTION3(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
261ODINFUNCTION3(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
320ODINFUNCTION2(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
358ODINFUNCTION1(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
377ODINFUNCTION2(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
404ODINFUNCTION5(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
457ODINFUNCTION2(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
479ODINFUNCTION2(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
501ODINFUNCTION2(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
523ODINFUNCTION2(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
545ODINFUNCTION4(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
570ODINFUNCTION3(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
593ODINFUNCTION1(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
614ODINFUNCTION5(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
640ODINFUNCTION1(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
661ODINFUNCTION1(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
683ODINFUNCTION1(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
704ODINFUNCTION1(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
731ODINFUNCTION4(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
756ODINFUNCTION5(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
793ODINFUNCTION1(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
815ODINFUNCTION4(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
850ODINFUNCTION1(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
875ODINFUNCTION2(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
898ODINFUNCTION3(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
932ODINFUNCTION2(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
955ODINFUNCTION5(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
981ODINFUNCTION4(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
1007ODINFUNCTION2(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
1052ODINFUNCTION3(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
1087ODINFUNCTION4(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}
Note: See TracBrowser for help on using the repository browser.