Changeset 3687 for trunk/src/shlwapi/ordinal.cpp
- Timestamp:
- Jun 12, 2000, 10:09:48 AM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/shlwapi/ordinal.cpp
r3684 r3687 1 /* $Id: ordinal.cpp,v 1. 1 2000-06-11 08:44:53phaller Exp $ */1 /* $Id: ordinal.cpp,v 1.2 2000-06-12 08:09:37 phaller Exp $ */ 2 2 3 3 /* … … 52 52 #include "heap.h" 53 53 54 #include "win/wine/obj_base.h" 54 55 #include "shellapi.h" 55 56 #include "shlobj.h" … … 71 72 72 73 HANDLE WIN32API SHLWAPI_11(HANDLE, DWORD, DWORD, DWORD, DWORD); 73 DWORD WIN32API SHLWAPI_95(HWND, LPWSTR, int); 74 75 76 #define debugstr_guid(a) a 74 77 75 78 … … 555 558 556 559 560 /***************************************************************************** 561 * Name : ??? 562 * Purpose : Unknown (used by explorer.exe) 563 * Parameters: Unknown (wrong) 564 * Variables : 565 * Result : Unknown 566 * Remark : 567 * Status : UNTESTED STUB 568 * 569 * Author : Patrick Haller [Sun, 2000/06/09 04:47] 570 *****************************************************************************/ 571 572 ODINFUNCTION2(DWORD,SHLWAPI_17, 573 DWORD, arg0, 574 DWORD, arg1) 575 { 576 dprintf(("not implemented, explorer.exe will trap now")); 577 578 return 0; 579 } 580 581 582 /***************************************************************************** 583 * Name : ??? 584 * Purpose : Unknown (used by explorer.exe) 585 * Parameters: Unknown (wrong) 586 * Variables : 587 * Result : Unknown 588 * Remark : 589 * Status : UNTESTED STUB 590 * 591 * Author : Patrick Haller [Sun, 2000/06/09 04:47] 592 *****************************************************************************/ 593 594 ODINFUNCTION2(DWORD,SHLWAPI_18, 595 DWORD, arg0, 596 DWORD, arg1) 597 { 598 dprintf(("not implemented, explorer.exe will trap now")); 599 600 return 0; 601 } 602 603 604 /***************************************************************************** 605 * Name : SHLWAPI_19 606 * Purpose : Free memory 607 * Parameters: LPVOID lpMem 608 * Variables : 609 * Result : 610 * Remark : SHLWAPI.19 611 * Status : UNTESTED 612 * 613 * Author : Patrick Haller [Sun, 2000/06/09 04:47] 614 *****************************************************************************/ 615 616 ODINPROCEDURE1(SHLWAPI_19, 617 HLOCAL, hMem) 618 { 619 if (hMem != NULL) 620 LocalFree(hMem); 621 } 622 623 624 /***************************************************************************** 625 * Name : ??? 626 * Purpose : Unknown (used by explorer.exe) 627 * Parameters: Unknown (wrong) 628 * Variables : 629 * Result : Unknown 630 * Remark : 631 * Status : UNTESTED STUB 632 * 633 * Author : Patrick Haller [Sun, 2000/06/09 04:47] 634 *****************************************************************************/ 635 636 ODINFUNCTION2(DWORD,SHLWAPI_20, 637 DWORD, arg0, 638 DWORD, arg1) 639 { 640 dprintf(("not implemented, explorer.exe will trap now")); 641 642 return 0; 643 } 644 645 646 /***************************************************************************** 647 * Name : ??? 648 * Purpose : Unknown (used by explorer.exe) 649 * Parameters: Unknown (wrong) 650 * Variables : 651 * Result : Unknown 652 * Remark : 653 * Status : UNTESTED STUB 654 * 655 * Author : Patrick Haller [Sun, 2000/06/09 04:47] 656 *****************************************************************************/ 657 658 ODINFUNCTION2(DWORD,SHLWAPI_21, 659 DWORD, arg0, 660 DWORD, arg1) 661 { 662 dprintf(("not implemented, explorer.exe will trap now")); 663 664 return 0; 665 } 666 667 668 /***************************************************************************** 669 * Name : ??? 670 * Purpose : Unknown (used by explorer.exe) 671 * Parameters: Unknown (wrong) 672 * Variables : 673 * Result : Unknown 674 * Remark : 675 * Status : UNTESTED STUB 676 * 677 * Author : Patrick Haller [Sun, 2000/06/09 04:47] 678 *****************************************************************************/ 679 680 ODINFUNCTION2(DWORD,SHLWAPI_22, 681 DWORD, arg0, 682 DWORD, arg1) 683 { 684 dprintf(("not implemented, explorer.exe will trap now")); 685 686 return 0; 687 } 688 557 689 558 690 /***************************************************************************** … … 561 693 * Parameters: 562 694 * Variables : 563 * Result : 564 * Remark : 695 * Result : returns strlen(str) 696 * Remark : converts a guid to a string 565 697 * Status : UNTESTED STUB 566 698 * … … 568 700 *****************************************************************************/ 569 701 570 ODINFUNCTION3(DWORD,SHLWAPI_23, 571 DWORD,arg0, 572 DWORD,arg1, 573 DWORD,arg2) 574 { 575 dprintf(("not yet implemented")); 576 577 return 0; 702 ODINFUNCTION3(DWORD, SHLWAPI_23, 703 REFGUID,guid, /* [in] clsid */ 704 LPSTR, str, /* [out] buffer */ 705 INT, cmax) /* [in] size of buffer */ 706 { 707 char xguid[80]; 708 709 TRACE("(%s %p 0x%08x)stub\n", debugstr_guid(guid), str, cmax); 710 711 if (WINE_StringFromCLSID(guid,xguid)) return 0; 712 if (strlen(xguid)>=cmax) return 0; 713 strcpy(str,xguid); 714 return strlen(xguid) + 1; 715 } 716 717 718 /************************************************************************* 719 * SHLWAPI_24 [SHLWAPI.24] 720 * 721 * NOTES 722 * converts a guid to a string 723 * returns strlen(str) 724 */ 725 ODINFUNCTION3(DWORD, SHLWAPI_24, 726 REFGUID, guid, /* [in] clsid */ 727 LPWSTR, str, /* [out] buffer */ 728 INT, cmax) /* [in] size of buffer */ 729 { 730 TRACE("(%s %p 0x%08x)stub\n", debugstr_guid(guid), str, cmax); 731 return StringFromGUID2(guid, str, cmax); 578 732 } 579 733 … … 601 755 602 756 /***************************************************************************** 603 * Name : LRESULT CallWindowProcAW604 * Purpose : 757 * Name : SHLWAPI_30 758 * Purpose : Check for whitespace in ascii and unicode ? 605 759 * Parameters: 606 760 * Variables : 607 761 * Result : 608 * Remark : SHLWAPI.37762 * Remark : 609 763 * Status : UNTESTED 610 764 * … … 612 766 *****************************************************************************/ 613 767 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); 768 ODINFUNCTION1(DWORD,SHLWAPI_30, 769 WORD, ch) 770 { 771 if ( (ch == 0x09) || // tab 772 (ch == 0x20) || // space 773 (ch == 0x3000) || 774 (ch == 0xFEFF) ) 775 return 1; 623 776 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 777 return 0; 778 } 779 780 781 782 /***************************************************************************** 783 * Name : DWORD SHLWAPI_156 784 * Purpose : Case-sensitive wide string compare 785 * Parameters: LPSTR lpStr1 786 * LPSTR lpStr2 787 * Variables : 788 * Result : case-sensitive comparsion result between the two strings 789 * Remark : SHLWAPI.158 790 * Status : UNTESTED 636 791 * 637 792 * Author : Patrick Haller [Sun, 2000/06/10 04:02] 638 793 *****************************************************************************/ 639 794 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); 795 ODINFUNCTION2(DWORD, SHLWAPI_156, 796 LPWSTR, str1, /* "shell32.dll" */ 797 LPWSTR, str2) /* "shell32.dll" */ 798 { 799 return lstrcmpW(str1,str2); 991 800 } 992 801 … … 1035 844 /* OK, strings compared til end of string1 */ 1036 845 return 0; 846 } 847 848 849 /***************************************************************************** 850 * Name : DWORD SHLWAPI_160 851 * Purpose : 852 * Parameters: 853 * Variables : 854 * Result : 855 * Remark : SHLWAPI.160 856 * Status : UNTESTED STUB 857 * 858 * Author : Patrick Haller [Sun, 2000/06/10 04:02] 859 *****************************************************************************/ 860 861 ODINFUNCTION2(DWORD, SHLWAPI_160, 862 DWORD, arg0, 863 DWORD, arg1) 864 { 865 dprintf(("not implemented.\n")); 866 return 0; 867 } 868 869 870 871 /************************************************************************* 872 * SHLWAPI_169 [SHLWAPI] 873 */ 874 ODINFUNCTION1(DWORD, SHLWAPI_169, 875 IUnknown **, lplpUnknown) 876 { 877 IUnknown *lpUnknown; 878 879 if (lplpUnknown == NULL) 880 return 0; 881 882 lpUnknown = *lplpUnknown; 883 if (lpUnknown == NULL) 884 return 0; 885 886 *lplpUnknown = NULL; // kill object pointer 887 888 // and still call the object's release method 889 return IUnknown_Release(lpUnknown); 890 } 891 892 893 /***************************************************************************** 894 * Name : LPSTR SHLWAPI_170 895 * Purpose : verify if current string position is "//" or not 896 * skip "//" ... 897 * Parameters: LPSTR lpStr 898 * Variables : 899 * Result : lpStr + 2 or NULL 900 * Remark : SHLWAPI.170 901 * Status : UNTESTED 902 * 903 * Author : Patrick Haller [Sun, 2000/06/10 04:02] 904 *****************************************************************************/ 905 906 ODINFUNCTION1(LPSTR, SHLWAPI_170, 907 LPSTR, lpStr) 908 { 909 if ( (lpStr != NULL) && 910 (*lpStr == '/' ) && 911 (*(lpStr+1) == '/' ) ) 912 return lpStr+2; 913 else 914 return lpStr; 915 } 916 917 918 /************************************************************************* 919 * SHLWAPI_193 [SHLWAPI] 920 * query current color depth 921 */ 922 ODINFUNCTION0(DWORD, SHLWAPI_193) 923 { 924 HDC hdc; 925 DWORD ret; 926 927 hdc = GetDC(0); 928 ret = GetDeviceCaps(hdc, BITSPIXEL) * GetDeviceCaps(hdc, PLANES); 929 ReleaseDC(0, hdc); 930 return ret; 1037 931 } 1038 932 … … 1073 967 1074 968 969 /************************************************************************* 970 * SHLWAPI_219 [SHLWAPI] 971 */ 972 ODINFUNCTION4(HRESULT, SHLWAPI_219, 973 LPVOID, w, /* returned by LocalAlloc */ 974 LPVOID, x, 975 LPVOID, y, 976 LPWSTR, z) /* OUT: path */ 977 { 978 FIXME("(%p %p %p %p)stub\n",w,x,y,z); 979 return 0xabba1252; 980 } 981 982 983 /************************************************************************* 984 * SHLWAPI_222 [SHLWAPI] 985 * 986 * NOTES 987 * securityattributes missing 988 */ 989 ODINFUNCTION1(HANDLE, SHLWAPI_222, 990 LPCLSID, guid) 991 { 992 char lpstrName[80]; 993 strcpy( lpstrName,"shell."); 994 WINE_StringFromCLSID(guid, lpstrName + strlen(lpstrName)); 995 996 FIXME("(%s) stub\n", lpstrName); 997 return CreateSemaphoreA(NULL,0, 0x7fffffff, lpstrName); 998 } 999 1000 1001 /************************************************************************* 1002 * SHLWAPI_223 [SHLWAPI] 1003 * 1004 * NOTES 1005 * function guessed 1006 */ 1007 ODINFUNCTION1(DWORD, SHLWAPI_223, 1008 HANDLE, handle) 1009 { 1010 LONG oldCount; 1011 1012 FIXME("(0x%08x) stub\n",handle); 1013 1014 ReleaseSemaphore( handle, 1, &oldCount); 1015 WaitForSingleObject( handle, 0 ); 1016 return 0; 1017 } 1018 1019 1020 /************************************************************************* 1021 * SHLWAPI_237 [SHLWAPI] 1022 * Purpose: verify a WNDCLASSW structure 1023 */ 1024 ODINFUNCTION1(DWORD, SHLWAPI_237, 1025 LPWNDCLASSW, lpWndClass) 1026 { 1027 WNDCLASSW wndClass; 1028 1029 if (GetClassInfoW(lpWndClass->hInstance, 1030 (LPWSTR)lpWndClass->lpszClassName, 1031 &wndClass) == TRUE) 1032 return 1; 1033 else 1034 return 0; 1035 } 1036 1037 1075 1038 /***************************************************************************** 1076 1039 * Name : LRESULT DefWindowProcAW … … 1096 1059 return DefWindowProcA(hWnd, Msg, wParam, lParam); 1097 1060 } 1061 1062 1063 /************************************************************************* 1064 * SHLWAPI_241 [SHLWAPI] 1065 * 1066 */ 1067 ODINFUNCTION0(DWORD, SHLWAPI_241) 1068 { 1069 FIXME("()stub\n"); 1070 return 0xabba1243; 1071 } 1072 1073 /************************************************************************* 1074 * SHLWAPI_266 [SHLWAPI] 1075 */ 1076 ODINFUNCTION4(DWORD, SHLWAPI_266, 1077 LPVOID, w, 1078 LPVOID, x, 1079 LPVOID, y, 1080 LPVOID, z) 1081 { 1082 FIXME("(%p %p %p %p)stub\n",w,x,y,z); 1083 return 0xabba1248; 1084 } 1085 1086 /************************************************************************* 1087 * SHLWAPI_267 [SHLWAPI] 1088 */ 1089 ODINFUNCTION4(HRESULT, SHLWAPI_267, 1090 LPVOID, w, /* same as 1th parameter of SHLWAPI_219 */ 1091 LPVOID, x, /* same as 2nd parameter of SHLWAPI_219 */ 1092 LPVOID, y, 1093 LPVOID, z) 1094 { 1095 FIXME("(%p %p %p %p)stub\n",w,x,y,z); 1096 *((LPDWORD)z) = 0xabba1200; 1097 return 0xabba1254; 1098 } 1099 1100 /************************************************************************* 1101 * SHLWAPI_268 [SHLWAPI] 1102 */ 1103 ODINFUNCTION2(DWORD, SHLWAPI_268, 1104 LPVOID, w, 1105 LPVOID, x) 1106 { 1107 FIXME("(%p %p)\n",w,x); 1108 return 0xabba1251; /* 0 = failure */ 1109 } 1110 1111 /************************************************************************* 1112 * SHLWAPI_276 [SHLWAPI] 1113 * dynamically load SHELL32.DllGetVersion 1114 * 1115 */ 1116 ODINFUNCTION0(DWORD, SHLWAPI_276) 1117 { 1118 FIXME("()stub\n"); 1119 return 0xabba1244; 1120 } 1121 1122 1123 /************************************************************************* 1124 * SHLWAPI_309 [SHLWAPI] 1125 * 1126 */ 1127 ODINFUNCTION1(DWORD, SHLWAPI_309, 1128 LPVOID, x) 1129 { 1130 FIXME("(%p)stub\n",x); 1131 return 0xabba1245; 1132 } 1133 1134 /************************************************************************* 1135 * SHLWAPI_342 [SHLWAPI] 1136 * 1137 */ 1138 ODINFUNCTION4(DWORD, SHLWAPI_342, 1139 LPVOID, w, 1140 LPVOID, x, 1141 LPVOID, y, 1142 LPVOID, z) 1143 { 1144 FIXME("(%p %p %p %p)stub\n",w,x,y,z); 1145 return 0xabba1249; 1146 } 1147 1148 /************************************************************************* 1149 * SHLWAPI_346 [SHLWAPI] 1150 */ 1151 ODINFUNCTION3(DWORD, SHLWAPI_346, 1152 LPCWSTR, src, 1153 LPWSTR, dest, 1154 int, len) 1155 { 1156 FIXME("(%s %p 0x%08x)stub\n",debugstr_w(src),dest,len); 1157 lstrcpynW(dest, src, len); 1158 return lstrlenW(dest)+1; 1159 } 1160 1161 1162 /***************************************************************************** 1163 * Name : SHLWAPI_364 1164 * Purpose : call lstrcpynA 1165 * Parameters: 1166 * Variables : 1167 * Result : 1168 * Remark : SHLWAPI.364 1169 * Status : UNTESTED 1170 * 1171 * Author : 1172 *****************************************************************************/ 1173 1174 ODINFUNCTION3(INT, SHLWAPI_364, 1175 LPSTR, lpStr1, 1176 LPSTR, lpStr2, 1177 INT, nLength) 1178 { 1179 // @@@PH is there some parameter twisting ? 1180 lstrcpynA(lpStr2, 1181 lpStr1, 1182 nLength); 1183 1184 return 1; 1185 } 1186 1187 1188 1189 /************************************************************************* 1190 * SHLWAPI_377 [SHLWAPI] 1191 */ 1192 ODINFUNCTION3(DWORD, SHLWAPI_377, 1193 LPVOID, x, 1194 LPVOID, y, 1195 LPVOID, z) 1196 { 1197 FIXME("(%p %p %p)stub\n", x,y,z); 1198 return 0xabba1246; 1199 } 1200 1201 1202 /***************************************************************************** 1203 * Name : DWORD SHLWAPI_437 1204 * Purpose : Determine product version and options 1205 * Parameters: 1206 * Variables : 1207 * Result : 1208 * Remark : SHLWAPI.437 1209 * Status : UNTESTED 1210 * 1211 * Author : Patrick Haller [Sun, 2000/06/10 04:02] 1212 *****************************************************************************/ 1213 1214 #define REG_PRODUCTOPTIONS "System\\CurrentControlSet\\Control\\ProductOptions" 1215 #define REG_OPTIONS_PRODUCTTYPE "ProductType" 1216 #define REG_OPTIONS_ENTERPRISE "Enterprise" 1217 #define REG_OPTIONS_DATACENTER "DataCenter" 1218 1219 ODINFUNCTION1(DWORD, SHLWAPI_437, 1220 DWORD, nFunction) 1221 { 1222 static BOOL flagProductOptionsInitialized = FALSE; 1223 static BOOL flagIsProductEnterprise = FALSE; 1224 static BOOL flagIsProductDatacenter = FALSE; 1225 static OSVERSIONINFOA osVersionInfo; 1226 1227 HKEY hKeyOptions; 1228 DWORD dwKeyType; 1229 char szBuffer[260]; // MAX_PATH_LEN 1230 DWORD dwDataLength; 1231 1232 dprintf(("not (properly) implemented.\n")); 1233 1234 if (flagProductOptionsInitialized == FALSE) 1235 { 1236 // set to TRUE regardless of subsequent errors 1237 flagProductOptionsInitialized = TRUE; 1238 1239 // initialize required structures 1240 osVersionInfo.dwOSVersionInfoSize = 0x9c; 1241 if (GetVersionExA(&osVersionInfo) == FALSE) 1242 { 1243 osVersionInfo.dwOSVersionInfoSize = 0x94; 1244 GetVersionExA(&osVersionInfo); 1245 } 1246 1247 LONG rc = RegOpenKeyExA(HKEY_LOCAL_MACHINE, 1248 REG_PRODUCTOPTIONS, 1249 0, 1250 KEY_READ, 1251 &hKeyOptions); 1252 if (rc == ERROR_SUCCESS) 1253 { 1254 dwDataLength = sizeof(szBuffer); 1255 rc = RegQueryValueExA(hKeyOptions, 1256 REG_OPTIONS_PRODUCTTYPE, 1257 0, 1258 &dwKeyType, 1259 (LPBYTE)szBuffer, 1260 &dwDataLength); 1261 if (StrStrIA(szBuffer, REG_OPTIONS_ENTERPRISE) != 0) 1262 flagIsProductEnterprise = TRUE; 1263 else 1264 if (StrStrIA(szBuffer, REG_OPTIONS_DATACENTER) != 0) 1265 flagIsProductDatacenter = TRUE; 1266 1267 RegCloseKey(hKeyOptions); 1268 } 1269 } 1270 1271 // OK, now to the usual work ... 1272 switch (nFunction) 1273 { 1274 // is platform WINDOWS 1275 case 0: 1276 if (osVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) 1277 return 1; 1278 else 1279 return 0; 1280 1281 // is platform NT 1282 case 1: 1283 if (osVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT) 1284 return 1; 1285 else 1286 return 0; 1287 1288 // is platform Windows 95/98/xx ? 1289 case 2: 1290 if (osVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS) 1291 return 0; 1292 if (osVersionInfo.dwMajorVersion >= 4) 1293 return 1; 1294 else 1295 return 0; 1296 1297 // is platform NT4 or better? 1298 case 3: 1299 if (osVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_NT) 1300 return 0; 1301 if (osVersionInfo.dwMajorVersion >= 4) 1302 return 1; 1303 else 1304 return 0; 1305 1306 // is platform Win2000 or better? 1307 case 4: 1308 if (osVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_NT) 1309 return 0; 1310 if (osVersionInfo.dwMajorVersion >= 5) 1311 return 1; 1312 else 1313 return 0; 1314 1315 // at least Windows 4.10 ? 1316 case 5: 1317 if (osVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS) 1318 return 0; 1319 if (osVersionInfo.dwMajorVersion > 4) 1320 return 1; 1321 else 1322 if (osVersionInfo.dwMajorVersion == 4) 1323 if (osVersionInfo.dwMinorVersion >= 10) 1324 return 1; 1325 1326 return 0; 1327 1328 // is platform Windows98 GA ? 1329 case 6: 1330 if ( (osVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) && 1331 (osVersionInfo.dwMajorVersion == 4) && 1332 (osVersionInfo.dwMinorVersion == 10) && 1333 (osVersionInfo.dwBuildNumber == 1998) ) // 0x7ce 1334 return 1; 1335 else 1336 return 0; 1337 1338 // is platform some specific CSD ? 1339 case 7: 1340 case 8: 1341 //@@@PH incorrect 1342 if (osVersionInfo.dwMajorVersion >= 5) 1343 return 1; 1344 else 1345 return 0; 1346 1347 case 9: 1348 //@@@PH incorrect 1349 if (osVersionInfo.dwMajorVersion >= 5 || 1350 flagIsProductEnterprise || 1351 flagIsProductDatacenter) 1352 return 1; 1353 else 1354 return 0; 1355 1356 case 10: 1357 //@@@PH incorrect 1358 if (osVersionInfo.dwMajorVersion >= 5) 1359 return flagIsProductEnterprise; 1360 else 1361 return 0; 1362 1363 case 11: 1364 //@@@PH incorrect 1365 if (osVersionInfo.dwMajorVersion >= 5) 1366 return flagIsProductDatacenter; 1367 else 1368 return 0; 1369 1370 // @@@PH: Oops, wazzup there ? 1371 case 12: 1372 return GetSystemMetrics(4096); 1373 } 1374 1375 return 0; 1376 } 1377 1378 1379 /***************************************************************************** 1380 * Name : SHIsLowMemoryMachine 1381 * Purpose : 1382 * Parameters: BOOL fRetest - TRUE if testing shall be repeated 1383 * - FALSE if cached result is to be used 1384 * Variables : 1385 * Result : 0 - machine is not memory-constrained 1386 * 1 - machine is memory-constrained 1387 * Remark : SHLWAPI.584 1388 * Status : UNTESTED 1389 * 1390 * Author : Patrick Haller [Mon, 2000/06/11 02:02] 1391 *****************************************************************************/ 1392 1393 ODINFUNCTION1(int, SHIsLowMemoryMachine, 1394 BOOL, fRetest) 1395 { 1396 MEMORYSTATUS memBuffer; 1397 static int flagIsLowMemoryMachine = -1; 1398 ULONG ulMem; 1399 1400 // use cached result? 1401 if ( (fRetest == TRUE) || 1402 (flagIsLowMemoryMachine == -1) ) 1403 { 1404 // determine and store result 1405 GlobalMemoryStatus(&memBuffer); 1406 if (VERSION_OsIsUnicode()) 1407 ulMem = 0x1000000; // unicode operation mode 1408 else 1409 ulMem = 0x0800000; // ascii operation mode 1410 1411 // enough memory? 1412 if (memBuffer.dwTotalPhys <= ulMem) 1413 flagIsLowMemoryMachine = 1; 1414 else 1415 flagIsLowMemoryMachine = 0; 1416 } 1417 1418 return flagIsLowMemoryMachine; 1419 }
Note:
See TracChangeset
for help on using the changeset viewer.