- Add stubs for _25, _33, _35
- Add/correct code for: _15, _29, _30, _31, _151, _152, _153, _154,
_158.
diff --git a/dlls/shlwapi/ordinal.c b/dlls/shlwapi/ordinal.c
index e2d396d..1fc73e1 100644
--- a/dlls/shlwapi/ordinal.c
+++ b/dlls/shlwapi/ordinal.c
@@ -19,6 +19,7 @@
#include "wine/unicode.h"
#include "wine/obj_base.h"
#include "wingdi.h"
+#include "winreg.h"
#include "winuser.h"
#include "debugtools.h"
@@ -69,6 +70,53 @@
}
/*************************************************************************
+ * SHLWAPI_15 [SHLWAPI.15]
+ *
+ * Function:
+ * Retrieves IE "AcceptLanguage" value from registry
+ *
+ */
+HRESULT WINAPI SHLWAPI_15 (
+ LPWSTR langbuf,
+ LPDWORD buflen)
+{
+ CHAR *mystr;
+ DWORD mystrlen, mytype;
+ HKEY mykey;
+ LCID mylcid;
+
+ mystrlen = *buflen;
+ mystr = (CHAR*)HeapAlloc(GetProcessHeap(),
+ HEAP_ZERO_MEMORY, mystrlen);
+ RegOpenKeyA(HKEY_CURRENT_USER,
+ "Software\\Microsoft\\Internet Explorer\\International",
+ &mykey);
+ if (RegQueryValueExA(mykey, "AcceptLanguage",
+ 0, &mytype, mystr, &mystrlen)) {
+ mylcid = GetUserDefaultLCID();
+ /* somehow the mylcid translates into "en-us"
+ * this is similar to "LOCALE_SABBREVLANGNAME"
+ * which could be gotten via GetLocaleInfo.
+ * The only problem is LOCALE_SABBREVLANGUAGE" is
+ * a 3 char string (first 2 are country code and third is
+ * letter for "sublanguage", which does not come close to
+ * "en-us"
+ */
+ lstrcpynA(mystr, "en-us", mystrlen);
+ mystrlen = lstrlenA(mystr);
+ }
+ else {
+ /* handle returned string */
+ FIXME("missing code\n");
+ }
+ RegCloseKey(mykey);
+ *buflen = MultiByteToWideChar(0, 0, mystr, -1, langbuf, (*buflen)-1);
+ HeapFree(GetProcessHeap(), 0, mystr);
+ TRACE("language is %s\n", debugstr_w(langbuf));
+ return 0;
+}
+
+/*************************************************************************
* @ [SHLWAPI.16]
*/
HRESULT WINAPI SHLWAPI_16 (
@@ -127,22 +175,43 @@
}
/*************************************************************************
+ * SHLWAPI_25 [SHLWAPI.25]
+ *
+ */
+BOOL WINAPI SHLWAPI_25(DWORD dw1)
+{
+ FIXME("(%08lx): stub\n", dw1);
+ return FALSE;
+}
+
+/*************************************************************************
+ * SHLWAPI_29 [SHLWAPI.29]
+ *
+ * Seems to be iswspace
+ */
+BOOL WINAPI SHLWAPI_29(WCHAR wc)
+{
+ return (get_char_typeW(wc) & C1_SPACE) != 0;
+}
+
+/*************************************************************************
* SHLWAPI_30 [SHLWAPI.30]
*
- * Seems to be an isspaceW.
+ * Seems to be iswblank
*/
-BOOL WINAPI SHLWAPI_30(LPWSTR lpcChar)
+BOOL WINAPI SHLWAPI_30(WCHAR wc)
{
- switch (*lpcChar)
- {
- case (WCHAR)'\t':
- case (WCHAR)' ':
- case 160:
- case 12288:
- case 65279:
- return TRUE;
- }
- return FALSE;
+ return (get_char_typeW(wc) & C1_BLANK) != 0;
+}
+
+/*************************************************************************
+ * SHLWAPI_31 [SHLWAPI.31]
+ *
+ * Seems to be iswpunct
+ */
+BOOL WINAPI SHLWAPI_31(WCHAR wc)
+{
+ return (get_char_typeW(wc) & C1_PUNCT) != 0;
}
/*************************************************************************
@@ -160,6 +229,27 @@
}
/*************************************************************************
+ * SHLWAPI_33 [SHLWAPI.33]
+ *
+ */
+BOOL WINAPI SHLWAPI_33(DWORD dw1)
+{
+ FIXME("(%08lx): stub\n", dw1);
+ if (HIWORD(dw1)) return TRUE;
+ return FALSE;
+}
+
+/*************************************************************************
+ * SHLWAPI_35 [SHLWAPI.35]
+ *
+ */
+BOOL WINAPI SHLWAPI_35(LPVOID p1, DWORD dw2, LPVOID p3)
+{
+ FIXME("(%p, 0x%08lx, %p): stub\n", p1, dw2, p3);
+ return TRUE;
+}
+
+/*************************************************************************
* @ [SHLWAPI.40]
*
* Get pointer to next Unicode character.
@@ -187,38 +277,44 @@
/*************************************************************************
* @ [SHLWAPI.151]
- *
- * pStr "HTTP/1.1", dw1 0x5
+ * Function: Compare two ASCII strings for "len" bytes.
+ * Returns: *str1-*str2 (case sensitive)
*/
-DWORD WINAPI SHLWAPI_151(LPSTR pStr, LPVOID ptr, DWORD dw1)
+DWORD WINAPI SHLWAPI_151(LPSTR str1, LPSTR str2, INT len)
{
- FIXME("('%s', %p, %08lx): stub\n", pStr, ptr, dw1);
- return 0;
+ return strncmp( str1, str2, len );
}
/*************************************************************************
* @ [SHLWAPI.152]
+ *
+ * Function: Compare two WIDE strings for "len" bytes.
+ * Returns: *str1-*str2 (case sensitive)
*/
DWORD WINAPI SHLWAPI_152(LPWSTR str1, LPWSTR str2, INT len)
{
- if (!len)
- return 0;
-
- while (--len && *str1 && *str1 == *str2)
- {
- str1++;
- str2++;
- }
- return *str1 - *str2;
+ return strncmpW( str1, str2, len );
}
/*************************************************************************
* @ [SHLWAPI.153]
+ * Function: Compare two ASCII strings for "len" bytes via caseless compare.
+ * Returns: *str1-*str2 (case insensitive)
*/
-DWORD WINAPI SHLWAPI_153(LPSTR str1, LPSTR str2, DWORD dw3)
+DWORD WINAPI SHLWAPI_153(LPSTR str1, LPSTR str2, DWORD len)
{
- FIXME("'%s' '%s' %08lx - stub\n", str1, str2, dw3);
- return 0;
+ return strncasecmp( str1, str2, len );
+}
+
+/*************************************************************************
+ * @ [SHLWAPI.154]
+ *
+ * Function: Compare two WIDE strings for "len" bytes via caseless compare.
+ * Returns: *str1-*str2 (case insensitive)
+ */
+DWORD WINAPI SHLWAPI_154(LPWSTR str1, LPWSTR str2, DWORD len)
+{
+ return strncmpiW( str1, str2, len );
}
/*************************************************************************
@@ -228,8 +324,17 @@
*/
DWORD WINAPI SHLWAPI_156 ( LPWSTR str1, LPWSTR str2)
{
- while (*str1 && (*str1 == *str2)) { str1++; str2++; }
- return (INT)(*str1 - *str2);
+ return strcmpW( str1, str2 );
+}
+
+/*************************************************************************
+ * @ [SHLWAPI.158]
+ *
+ * Case insensitive string compare. Does not SetLastError(). ??
+ */
+DWORD WINAPI SHLWAPI_158 ( LPWSTR str1, LPWSTR str2)
+{
+ return strcmpiW( str1, str2 );
}
/*************************************************************************
diff --git a/dlls/shlwapi/shlwapi.spec b/dlls/shlwapi/shlwapi.spec
index 9aa7e3e..f57be71 100644
--- a/dlls/shlwapi/shlwapi.spec
+++ b/dlls/shlwapi/shlwapi.spec
@@ -24,7 +24,7 @@
12 stub @
13 stub @
14 stub @
-15 stub @
+15 stdcall @(ptr ptr) SHLWAPI_15
16 stdcall @(long long long long) SHLWAPI_16
17 stub @
18 stub @
@@ -34,17 +34,17 @@
22 stub @
23 stdcall @(ptr ptr long) SHLWAPI_23
24 stdcall @(ptr ptr long) SHLWAPI_24
-25 stub @
+25 stdcall @(long) SHLWAPI_25
26 stub @
27 stub @
28 stub @
-29 stub @
-30 stub @
-31 stub @
-32 stdcall @(ptr) SHLWAPI_32
-33 stub @
+29 stdcall @(long) SHLWAPI_29
+30 stdcall @(long) SHLWAPI_30
+31 stdcall @(long) SHLWAPI_31
+32 stdcall @(ptr) SHLWAPI_32
+33 stdcall @(long) SHLWAPI_33
34 stub @
-35 stub @
+35 stdcall @(ptr long ptr) SHLWAPI_35
36 stub @
37 forward @ user32.CallWindowProcW
38 forward @ user32.CharLowerW
@@ -163,11 +163,11 @@
151 stdcall @(str ptr long) SHLWAPI_151
152 stdcall @(wstr wstr long) SHLWAPI_152
153 stdcall @(long long long) SHLWAPI_153
-154 stub @
+154 stdcall @(wstr wstr long) SHLWAPI_154
155 stub @
156 stdcall @(wstr wstr) SHLWAPI_156
157 stub @
-158 stub @ #(wstr wstr) SHLWAPI_158
+158 stdcall @(wstr wstr) SHLWAPI_158
159 forward @ kernel32.CompareStringW
160 stub @
161 stub @
@@ -585,7 +585,7 @@
@ stub SHQueryInfoKeyW
@ stdcall SHQueryValueExA(long str ptr ptr ptr ptr) SHQueryValueExA
@ stdcall SHQueryValueExW(long wstr ptr ptr ptr ptr) SHQueryValueExW
-@ stub SHRegCloseUSKey
+@ stdcall SHRegCloseUSKey(ptr) SHRegCloseUSKey
@ stub SHRegCreateUSKeyA
@ stub SHRegCreateUSKeyW
@ stub SHRegDeleteEmptyUSKeyA
@@ -598,12 +598,12 @@
@ stub SHRegEnumUSValueW
@ stdcall SHRegGetBoolUSValueA(str str long long)SHRegGetBoolUSValueA
@ stdcall SHRegGetBoolUSValueW(wstr wstr long long)SHRegGetBoolUSValueW
-@ stdcall SHRegGetUSValueA ( ptr str ptr ptr ptr long ptr long ) SHRegGetUSValueA
-@ stdcall SHRegGetUSValueW ( ptr wstr ptr ptr ptr long ptr long ) SHRegGetUSValueW
+@ stdcall SHRegGetUSValueA ( str str ptr ptr ptr long ptr long ) SHRegGetUSValueA
+@ stdcall SHRegGetUSValueW ( wstr wstr ptr ptr ptr long ptr long ) SHRegGetUSValueW
@ stdcall SHRegOpenUSKeyA ( str long long long long ) SHRegOpenUSKeyA
@ stdcall SHRegOpenUSKeyW ( wstr long long long long ) SHRegOpenUSKeyW
-@ stub SHRegQueryInfoUSKeyA
-@ stub SHRegQueryInfoUSKeyW
+@ stdcall SHRegQueryInfoUSKeyA ( long ptr ptr ptr ptr long ) SHRegQueryInfoUSKeyA
+@ stdcall SHRegQueryInfoUSKeyW ( long ptr ptr ptr ptr long ) SHRegQueryInfoUSKeyW
@ stdcall SHRegQueryUSValueA ( long str ptr ptr ptr long ptr long ) SHRegQueryUSValueA
@ stdcall SHRegQueryUSValueW ( long wstr ptr ptr ptr long ptr long ) SHRegQueryUSValueW
@ stub SHRegSetUSValueA
@@ -673,8 +673,8 @@
@ stub UrlCreateFromPathW
@ stdcall UrlEscapeA(str ptr ptr long)UrlEscapeA
@ stdcall UrlEscapeW(wstr ptr ptr long)UrlEscapeW
-@ stub UrlGetLocationA
-@ stub UrlGetLocationW
+@ stdcall UrlGetLocationA(str) UrlGetLocationA
+@ stdcall UrlGetLocationW(wstr) UrlGetLocationW
@ stub UrlGetPartA
@ stub UrlGetPartW
@ stdcall UrlHashA(str ptr long) UrlHashA
@@ -711,6 +711,8 @@
@ stdcall _SHGetInstanceExplorer@4(ptr) _SHGetInstanceExplorer
@ stub PathUndecorateA
@ stub PathUndecorateW
+@ stub PathUnExpandEnvStringsA
+@ stub PathUnExpandEnvStringsW
@ stub SHCopyKeyA
@ stub SHCopyKeyW
@ stub SHAutoComplete
@@ -720,6 +722,9 @@
@ stub SHCreateThread
@ stub SHGetThreadRef
@ stub SHRegDuplicateHKey
+@ stub SHRegSetPathA
+@ stub SHRegSetPathW
+@ stub SHRegisterValidateTemplate
@ stub SHSetThreadRef
@ stub SHSkipJunction
@ stub SHStrDupA