kernel32: Implement EnumDateFormatsExEx().

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
oldstable
Nikolay Sivov 2015-11-08 22:28:34 +03:00 committed by Alexandre Julliard
parent 292e4153cf
commit 3d728e68d3
3 changed files with 27 additions and 4 deletions

View File

@ -401,7 +401,7 @@
@ stdcall EnumCalendarInfoW(ptr long long long)
@ stdcall EnumDateFormatsA(ptr long long)
@ stdcall EnumDateFormatsExA(ptr long long)
# @ stub EnumDateFormatsExEx
@ stdcall EnumDateFormatsExEx(ptr wstr long long)
@ stdcall EnumDateFormatsExW(ptr long long)
@ stdcall EnumDateFormatsW(ptr long long)
@ stdcall EnumLanguageGroupLocalesA(ptr long long ptr)

View File

@ -1753,10 +1753,12 @@ struct enumdateformats_context {
union {
DATEFMT_ENUMPROCW callback; /* user callback pointer */
DATEFMT_ENUMPROCEXW callbackex;
DATEFMT_ENUMPROCEXEX callbackexex;
} u;
LCID lcid; /* locale of interest */
DWORD flags;
BOOL unicode; /* A vs W callback type, only for regular and Ex callbacks */
LCID lcid; /* locale of interest */
DWORD flags;
LPARAM lParam;
BOOL unicode; /* A vs W callback type, only for regular and Ex callbacks */
};
/******************************************************************************
@ -1821,6 +1823,9 @@ static BOOL NLS_EnumDateFormats(const struct enumdateformats_context *ctxt)
case CALLBACK_ENUMPROCEX:
ctxt->u.callbackex(ctxt->unicode ? bufW : (WCHAR*)bufA, cal_id);
break;
case CALLBACK_ENUMPROCEXEX:
ctxt->u.callbackexex(bufW, cal_id, ctxt->lParam);
break;
default:
;
}
@ -1899,6 +1904,22 @@ BOOL WINAPI EnumDateFormatsW(DATEFMT_ENUMPROCW proc, LCID lcid, DWORD flags)
return NLS_EnumDateFormats(&ctxt);
}
/**************************************************************************
* EnumDateFormatsExEx (KERNEL32.@)
*/
BOOL WINAPI EnumDateFormatsExEx(DATEFMT_ENUMPROCEXEX proc, const WCHAR *locale, DWORD flags, LPARAM lParam)
{
struct enumdateformats_context ctxt;
ctxt.type = CALLBACK_ENUMPROCEXEX;
ctxt.u.callbackexex = proc;
ctxt.lcid = LocaleNameToLCID(locale, 0);
ctxt.flags = flags;
ctxt.lParam = lParam;
return NLS_EnumDateFormats(&ctxt);
}
/**************************************************************************
* EnumTimeFormatsA (KERNEL32.@)
*

View File

@ -734,6 +734,7 @@ typedef struct _nlsversioninfoex {
/* Define a bunch of callback types */
typedef BOOL (CALLBACK *CALINFO_ENUMPROCEXEX)(LPWSTR,CALID,LPWSTR,LPARAM);
typedef BOOL (CALLBACK *DATEFMT_ENUMPROCEXEX)(LPWSTR,CALID,LPARAM);
#if defined(STRICT)
typedef BOOL (CALLBACK *CALINFO_ENUMPROCA)(LPSTR);
typedef BOOL (CALLBACK *CALINFO_ENUMPROCW)(LPWSTR);
@ -843,6 +844,7 @@ WINBASEAPI BOOL WINAPI EnumDateFormatsW(DATEFMT_ENUMPROCW,LCID,DWORD);
WINBASEAPI BOOL WINAPI EnumDateFormatsExA(DATEFMT_ENUMPROCEXA,LCID,DWORD);
WINBASEAPI BOOL WINAPI EnumDateFormatsExW(DATEFMT_ENUMPROCEXW,LCID,DWORD);
#define EnumDateFormatsEx WINELIB_NAME_AW(EnumDateFormatsEx)
WINBASEAPI BOOL WINAPI EnumDateFormatsExEx(DATEFMT_ENUMPROCEXEX,LPCWSTR,DWORD,LPARAM);
WINBASEAPI BOOL WINAPI EnumSystemCodePagesA(CODEPAGE_ENUMPROCA,DWORD);
WINBASEAPI BOOL WINAPI EnumSystemCodePagesW(CODEPAGE_ENUMPROCW,DWORD);
#define EnumSystemCodePages WINELIB_NAME_AW(EnumSystemCodePages)