45 #define LCID_US MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT) 142 #define FMT_TYPE_UNKNOWN 0x0 143 #define FMT_TYPE_GENERAL 0x1 144 #define FMT_TYPE_NUMBER 0x2 145 #define FMT_TYPE_DATE 0x3 146 #define FMT_TYPE_STRING 0x4 148 #define FMT_TO_STRING 0x0 164 #define FmtGetPositive(x) (x->starts[0]) 165 #define FmtGetNegative(x) (x->starts[1] ? x->starts[1] : x->starts[0]) 166 #define FmtGetZero(x) (x->starts[2] ? x->starts[2] : x->starts[0]) 167 #define FmtGetNull(x) (x->starts[3] ? x->starts[3] : x->starts[0]) 173 #define FMT_FLAG_LT 0x1 174 #define FMT_FLAG_GT 0x2 175 #define FMT_FLAG_RTL 0x4 190 #define FMT_FLAG_PERCENT 0x1 191 #define FMT_FLAG_EXPONENT 0x2 192 #define FMT_FLAG_THOUSANDS 0x4 193 #define FMT_FLAG_BOOL 0x20 219 #define FMT_GEN_COPY 0x00 220 #define FMT_GEN_INLINE 0x01 221 #define FMT_GEN_END 0x02 222 #define FMT_DATE_TIME_SEP 0x03 223 #define FMT_DATE_DATE_SEP 0x04 224 #define FMT_DATE_GENERAL 0x05 225 #define FMT_DATE_QUARTER 0x06 226 #define FMT_DATE_TIME_SYS 0x07 227 #define FMT_DATE_DAY 0x08 228 #define FMT_DATE_DAY_0 0x09 229 #define FMT_DATE_DAY_SHORT 0x0A 230 #define FMT_DATE_DAY_LONG 0x0B 231 #define FMT_DATE_SHORT 0x0C 232 #define FMT_DATE_LONG 0x0D 233 #define FMT_DATE_MEDIUM 0x0E 234 #define FMT_DATE_DAY_WEEK 0x0F 235 #define FMT_DATE_WEEK_YEAR 0x10 236 #define FMT_DATE_MON 0x11 237 #define FMT_DATE_MON_0 0x12 238 #define FMT_DATE_MON_SHORT 0x13 239 #define FMT_DATE_MON_LONG 0x14 240 #define FMT_DATE_YEAR_DOY 0x15 241 #define FMT_DATE_YEAR_0 0x16 243 #define FMT_DATE_YEAR_LONG 0x18 244 #define FMT_DATE_MIN 0x1A 245 #define FMT_DATE_MIN_0 0x1B 246 #define FMT_DATE_SEC 0x1C 247 #define FMT_DATE_SEC_0 0x1D 248 #define FMT_DATE_HOUR 0x1E 249 #define FMT_DATE_HOUR_0 0x1F 250 #define FMT_DATE_HOUR_12 0x20 251 #define FMT_DATE_HOUR_12_0 0x21 252 #define FMT_DATE_TIME_UNK2 0x23 254 #define FMT_DATE_AMPM_SYS1 0x2E 255 #define FMT_DATE_AMPM_UPPER 0x2F 256 #define FMT_DATE_A_UPPER 0x30 257 #define FMT_DATE_AMPM_SYS2 0x31 258 #define FMT_DATE_AMPM_LOWER 0x32 259 #define FMT_DATE_A_LOWER 0x33 260 #define FMT_NUM_COPY_ZERO 0x34 261 #define FMT_NUM_COPY_SKIP 0x35 262 #define FMT_NUM_DECIMAL 0x36 263 #define FMT_NUM_EXP_POS_U 0x37 264 #define FMT_NUM_EXP_NEG_U 0x38 265 #define FMT_NUM_EXP_POS_L 0x39 266 #define FMT_NUM_EXP_NEG_L 0x3A 267 #define FMT_NUM_CURRENCY 0x3B 268 #define FMT_NUM_TRUE_FALSE 0x3D 269 #define FMT_NUM_YES_NO 0x3E 270 #define FMT_NUM_ON_OFF 0x3F 271 #define FMT_STR_COPY_SPACE 0x40 272 #define FMT_STR_COPY_SKIP 0x41 275 static const WCHAR szGeneralDate[] = {
'G',
'e',
'n',
'e',
'r',
'a',
'l',
' ',
'D',
'a',
't',
'e',
'\0' };
283 static const WCHAR szShortDate[] = {
'S',
'h',
'o',
'r',
't',
' ',
'D',
'a',
't',
'e',
'\0' };
291 static const WCHAR szMediumDate[] = {
'M',
'e',
'd',
'i',
'u',
'm',
' ',
'D',
'a',
't',
'e',
'\0' };
307 static const WCHAR szShortTime[] = {
'S',
'h',
'o',
'r',
't',
' ',
'T',
'i',
'm',
'e',
'\0' };
315 static const WCHAR szMediumTime[] = {
'M',
'e',
'd',
'i',
'u',
'm',
' ',
'T',
'i',
'm',
'e',
'\0' };
332 static const WCHAR szTrueFalse[] = {
'T',
'r',
'u',
'e',
'/',
'F',
'a',
'l',
's',
'e',
'\0' };
356 static const WCHAR szGeneralNumber[] = {
'G',
'e',
'n',
'e',
'r',
'a',
'l',
' ',
'N',
'u',
'm',
'b',
'e',
'r',
'\0' };
402 static const WCHAR szScientific[] = {
'S',
'c',
'i',
'e',
'n',
't',
'i',
'f',
'i',
'c',
'\0' };
455 #define NEED_SPACE(x) if (cbTok < (int)(x)) return TYPE_E_BUFFERTOOSMALL; cbTok -= (x) 458 #define COULD_BE(typ) ((!fmt_number && header->type==FMT_TYPE_UNKNOWN)||header->type==typ) 461 #define FMT_STATE_OPEN_COPY 0x1 462 #define FMT_STATE_WROTE_DECIMAL 0x2 463 #define FMT_STATE_SEEN_HOURS 0x4 464 #define FMT_STATE_WROTE_MINUTES 0x8 496 int cbTok,
int nFirstDay,
int nFirstWeek,
497 LCID lcid,
int *pcbActual)
500 static const WCHAR szTTTTT[] = {
't',
't',
't',
't',
't' };
501 static const WCHAR szAMPM[] = {
'A',
'M',
'P',
'M' };
502 static const WCHAR szampm[] = {
'a',
'm',
'p',
'm' };
503 static const WCHAR szAMSlashPM[] = {
'A',
'M',
'/',
'P',
'M' };
504 static const WCHAR szamSlashpm[] = {
'a',
'm',
'/',
'p',
'm' };
505 const BYTE *namedFmt;
515 TRACE(
"(%s,%p,%d,%d,%d,0x%08x,%p)\n",
debugstr_w(lpszFormat), rgbTok, cbTok,
516 nFirstDay, nFirstWeek, lcid, pcbActual);
519 nFirstDay < 0 || nFirstDay > 7 || nFirstWeek < 0 || nFirstWeek > 3)
522 if (!lpszFormat || !*lpszFormat)
540 memcpy(rgbTok, namedFmt, namedFmt[0]);
541 TRACE(
"Using pre-tokenised named format %s\n",
debugstr_w(lpszFormat));
561 while (*pFormat ==
';')
564 if (++fmt_number > 3)
570 TRACE(
"New header\n");
574 header->starts[fmt_number] = pOut - rgbTok;
583 else if (*pFormat ==
'\\')
591 *pOut++ = pFormat - lpszFormat;
600 else if (*pFormat ==
'"')
608 else if (pFormat[1] ==
'"')
615 while (*pFormat && *pFormat !=
'"')
619 *pOut++ =
start - lpszFormat;
620 *pOut++ = pFormat -
start;
623 TRACE(
"Quoted string pos %d, len %d\n", pOut[-2], pOut[-1]);
641 while (*pFormat ==
'0')
649 num_header->
whole += *pOut;
650 TRACE(
"%d 0's\n", *pOut);
664 while (*pFormat ==
'#')
672 num_header->
whole += *pOut;
673 TRACE(
"%d #'s\n", *pOut);
690 TRACE(
"decimal sep\n");
692 else if ((*pFormat ==
'e' || *pFormat ==
'E') && (pFormat[1] ==
'-' ||
700 if (*pFormat ==
'e') {
701 if (pFormat[1] ==
'+')
706 if (pFormat[1] ==
'+')
713 while (*pFormat ==
'0')
730 TRACE(
"thousands sep\n");
762 else if ((*pFormat ==
'a' || *pFormat ==
'A') &&
777 *pLastHours = *pLastHours + 2;
780 else if (*pFormat ==
'a' && pFormat[1] ==
'/' &&
781 (pFormat[2] ==
'p' || pFormat[2] ==
'P'))
792 *pLastHours = *pLastHours + 2;
795 else if (*pFormat ==
'A' && pFormat[1] ==
'/' &&
796 (pFormat[2] ==
'p' || pFormat[2] ==
'P'))
807 *pLastHours = *pLastHours + 2;
810 else if (*pFormat ==
'a' && !
wcsncmp(pFormat, szamSlashpm,
ARRAY_SIZE(szamSlashpm)))
821 *pLastHours = *pLastHours + 2;
824 else if (*pFormat ==
'A' && !
wcsncmp(pFormat, szAMSlashPM,
ARRAY_SIZE(szAMSlashPM)))
856 while ((*pFormat ==
'd' || *pFormat ==
'D') &&
count < 6)
883 if (*pFormat ==
'h' || *pFormat ==
'H')
908 while ((*pFormat ==
'm' || *pFormat ==
'M') &&
count < 4)
937 if (*pFormat ==
'n' || *pFormat ==
'N')
972 if (*pFormat ==
's' || *pFormat ==
'S')
985 else if ((*pFormat ==
't' || *pFormat ==
'T') &&
1006 if (*pFormat ==
'w' || *pFormat ==
'W')
1011 *pOut++ = nFirstDay;
1012 *pOut++ = nFirstWeek;
1019 *pOut++ = nFirstDay;
1033 while ((*pFormat ==
'y' || *pFormat ==
'Y') &&
count < 4)
1062 while (*pFormat ==
'@')
1068 TRACE(
"%d @'s\n", *pOut);
1082 while (*pFormat ==
'&')
1088 TRACE(
"%d &'s\n", *pOut);
1099 if (*pFormat ==
'<')
1103 TRACE(
"to %s case\n", *pFormat ==
'<' ?
"lower" :
"upper");
1117 TRACE(
"copy right-to-left\n");
1137 pOut[-1] = pOut[-1] + 1;
1138 TRACE(
"extend copy (char '%c'), length now %d\n", *pFormat, pOut[-1]);
1143 TRACE(
"New copy (char '%c')\n", *pFormat);
1146 *pOut++ = pFormat - lpszFormat;
1156 header->size = pOut - rgbTok;
1158 *pcbActual =
header->size;
1164 #define NUM_WROTE_DEC 0x01 1165 #define NUM_WRITE_ON 0x02 1166 #define NUM_WROTE_SIGN 0x04 1173 BYTE rgbDig[256], *prgbDig;
1175 int have_int, need_int = 0, have_frac, need_frac, exponent = 0, pad = 0;
1177 WCHAR thousandSeparator[32];
1186 rgbTok,
dwFlags, pbstrOut, lcid);
1193 have_int = have_frac = 0;
1195 V_BOOL(&vBool) = VARIANT_FALSE;
1204 np.
cDig =
sizeof(rgbDig);
1218 V_BOOL(&vBool) = VARIANT_TRUE;
1220 else if (have_int == 1 && !exponent && rgbDig[0] == 0)
1223 V_BOOL(&vBool) = VARIANT_FALSE;
1228 V_BOOL(&vBool) = VARIANT_TRUE;
1231 TRACE(
"num header: flags = 0x%x, mult=%d, div=%d, whole=%d, fract=%d\n",
1235 need_int = numHeader->
whole;
1239 !(have_int == 1 && !exponent && rgbDig[0] == 0))
1246 pad = need_int - have_int;
1250 have_int = need_int;
1258 pad =
max(exponent, -have_int);
1266 if(exponent < 0 && exponent > (-256 + have_int + have_frac))
1269 memmove(rgbDig - exponent, rgbDig, have_int + have_frac);
1271 have_frac -= exponent;
1277 if (have_frac > need_frac)
1279 prgbDig = &rgbDig[have_int + need_frac];
1280 have_frac = need_frac;
1283 while (prgbDig-- > rgbDig && *prgbDig == 9)
1285 if (prgbDig < rgbDig)
1293 rgbDig[have_int + need_frac] = 0;
1304 while (have_frac > 0 && rgbDig[have_int + have_frac - 1] == 0)
1307 TRACE(
"have_int=%d,need_int=%d,have_frac=%d,need_frac=%d,pad=%d,exp=%d\n",
1308 have_int, need_int, have_frac, need_frac, pad, exponent);
1315 thousandSeparator[0] =
',';
1316 thousandSeparator[1] = 0;
1325 WCHAR defaultChar =
'?';
1326 DWORD boolFlag, localeValue = 0;
1329 if (pToken - rgbTok >
header->size)
1331 ERR(
"Ran off the end of the format!\n");
1333 goto VARIANT_FormatNumber_Exit;
1340 memcpy(pBuff, lpszFormat + pToken[1], pToken[2] *
sizeof(
WCHAR));
1349 *pBuff++ = *pToken++;
1354 goto VARIANT_FormatNumber_Bool;
1358 goto VARIANT_FormatNumber_Bool;
1363 VARIANT_FormatNumber_Bool:
1369 ERR(
"Boolean token not at end of format!\n");
1371 goto VARIANT_FormatNumber_Exit;
1388 TRACE(
"write negative sign\n");
1392 shouldAdvance =
FALSE;
1395 TRACE(
"write decimal separator\n");
1402 TRACE(
"write currency symbol\n");
1436 TRACE(
"write %d %sdigits or %s\n", pToken[1],
1447 pad =
max(exponent, -pToken[1]);
1449 count =
min(have_frac, pToken[1] + pad);
1450 for (
i = 0;
i > pad;
i--)
1456 pad += pToken[1] -
count;
1459 *pBuff++ =
'0' + *prgbDig++;
1462 for (; pad > 0; pad--)
1468 int count, count_max, position;
1472 TRACE(
"write negative sign\n");
1476 shouldAdvance =
FALSE;
1480 position = have_int + pad;
1482 position =
max(position, need_int);
1483 need_int -= pToken[1];
1484 count_max = have_int + pad - need_int;
1489 count = pToken[1] - count_max;
1495 position > 1 && (--position % 3) == 0)
1498 TRACE(
"write thousand separator\n");
1499 for (
k = 0; thousandSeparator[
k];
k++)
1500 *pBuff++ = thousandSeparator[
k];
1505 (have_int > 0 && *prgbDig > 0))
1510 TRACE(
"write %d whole number digits\n",
count);
1514 *pBuff++ =
'0' + *prgbDig++;
1516 position > 1 && (--position % 3) == 0)
1519 TRACE(
"write thousand separator\n");
1520 for (
k = 0; thousandSeparator[
k];
k++)
1521 *pBuff++ = thousandSeparator[
k];
1527 TRACE(
"write %d whole trailing 0's\n",
count);
1532 position > 1 && (--position % 3) == 0)
1535 TRACE(
"write thousand separator\n");
1536 for (
k = 0; thousandSeparator[
k];
k++)
1537 *pBuff++ = thousandSeparator[
k];
1545 ERR(
"Unknown token 0x%02x!\n", *pToken);
1547 goto VARIANT_FormatNumber_Exit;
1559 TRACE(
"added %d '%c'\n", defaultChar, defaultChar);
1560 *pBuff++ = defaultChar;
1567 VARIANT_FormatNumber_Exit:
1620 DWORD dwVal = 0, localeValue = 0, dwFmt = 0;
1622 WCHAR defaultChar =
'?';
1624 if (pToken - rgbTok >
header->size)
1626 ERR(
"Ran off the end of the format!\n");
1628 goto VARIANT_FormatDate_Exit;
1635 memcpy(pBuff, lpszFormat + pToken[1], pToken[2] *
sizeof(
WCHAR));
1644 *pBuff++ = *pToken++;
1648 TRACE(
"time separator\n");
1654 TRACE(
"date separator\n");
1665 goto VARIANT_FormatDate_Exit;
1668 *pBuff++ = *pDate++;
1691 goto VARIANT_FormatDate_Exit;
1694 *pBuff++ = *pDate++;
1711 TRACE(
"short day\n");
1718 TRACE(
"long day\n");
1734 FIXME(
"Medium date treated as long date\n");
1755 FIXME(
"Ignoring nFirstDay of %d, nFirstWeek of %d\n", pToken[0], pToken[1]);
1770 TRACE(
"short month\n");
1777 TRACE(
"long month\n");
1845 *pBuff++ = udate.
st.
wHour < 12 ?
'A' :
'P';
1850 *pBuff++ = udate.
st.
wHour < 12 ?
'A' :
'P';
1854 *pBuff++ = udate.
st.
wHour < 12 ?
'a' :
'p';
1859 *pBuff++ = udate.
st.
wHour < 12 ?
'a' :
'p';
1863 ERR(
"Unknown token 0x%02x!\n", *pToken);
1865 goto VARIANT_FormatDate_Exit;
1878 TRACE(
"added %d %c\n", defaultChar, defaultChar);
1879 *pBuff++ = defaultChar;
1890 goto VARIANT_FormatDate_Exit;
1895 else if (szPrintFmt)
1897 swprintf(pBuff, szPrintFmt, dwVal);
1904 VARIANT_FormatDate_Exit:
1933 rgbTok,
dwFlags, pbstrOut, lcid);
1948 if (
V_BSTR(&vStr)[0] ==
'\0')
1963 if (pToken - rgbTok >
header->size)
1965 ERR(
"Ran off the end of the format!\n");
1967 goto VARIANT_FormatString_Exit;
1974 memcpy(pBuff, lpszFormat + pToken[1], pToken[2] *
sizeof(
WCHAR));
1981 dwCount = pToken[1];
1984 TRACE(
"insert %d initial spaces\n", blanks_first);
1985 while (dwCount > 0 && blanks_first > 0)
1992 TRACE(
"copy %d chars%s\n", dwCount,
1994 while (dwCount > 0 && *pSrc)
2005 TRACE(
"insert %d spaces\n", dwCount);
2006 while (dwCount-- > 0)
2013 ERR(
"Unknown token 0x%02x!\n", *pToken);
2015 goto VARIANT_FormatString_Exit;
2020 VARIANT_FormatString_Exit:
2042 #define NUMBER_VTBITS (VTBIT_I1|VTBIT_UI1|VTBIT_I2|VTBIT_UI2| \ 2043 VTBIT_I4|VTBIT_UI4|VTBIT_I8|VTBIT_UI8| \ 2044 VTBIT_R4|VTBIT_R8|VTBIT_CY|VTBIT_DECIMAL| \ 2045 VTBIT_BOOL|VTBIT_INT|VTBIT_UINT) 2059 rgbTok,
dwFlags, pbstrOut, lcid);
2066 if (!pVarIn || !rgbTok)
2077 VarFormatFromTokens_AsStr:
2080 *pbstrOut =
V_BSTR(&vTmp);
2100 ERR(
"unrecognised format type 0x%02x\n",
header->type);
2108 goto VarFormatFromTokens_AsStr;
2146 nFirstDay, nFirstWeek,
dwFlags, pbstrOut);
2197 if (!pVarIn || !pbstrOut || nFormat < 0 || nFormat > 4)
2212 #define GETLOCALENUMBER(type,field) GetLocaleInfoW(LOCALE_USER_DEFAULT, \ 2213 type|LOCALE_RETURN_NUMBER, \ 2214 (LPWSTR)&numfmt.field, \ 2215 sizeof(numfmt.field)/sizeof(WCHAR)) 2247 TRACE(
"(%s,%d,%d,%d,%d,0x%08x,%p)\n",
debugstr_variant(pVarIn), nDigits, nLeading,
2248 nParens, nGrouping,
dwFlags, pbstrOut);
2250 if (!pVarIn || !pbstrOut || nDigits > 9)
2263 WCHAR buff[256], decimal[8], thousands[8];
2277 else if (nLeading == -1)
2282 if (nGrouping == -2)
2287 numfmt.
Grouping = grouping[2] ==
'2' ? 32 : grouping[0] -
'0';
2289 else if (nGrouping == -1)
2296 else if (nParens == -1)
2349 static const WCHAR szPercentBracket[] = {
'%',
')',
'\0' };
2354 TRACE(
"(%s,%d,%d,%d,%d,0x%08x,%p)\n",
debugstr_variant(pVarIn), nDigits, nLeading,
2355 nParens, nGrouping,
dwFlags, pbstrOut);
2357 if (!pVarIn || !pbstrOut || nDigits > 9)
2374 V_R8(&vDbl) *= 100.0;
2376 nGrouping,
dwFlags, pbstrOut);
2381 BOOL bBracket = (*pbstrOut)[dwLen] ==
')';
2427 TRACE(
"(%s,%d,%d,%d,%d,0x%08x,%p)\n",
debugstr_variant(pVarIn), nDigits, nLeading,
2428 nParens, nGrouping,
dwFlags, pbstrOut);
2430 if (!pVarIn || !pbstrOut || nDigits > 9)
2443 WCHAR buff[256], decimal[8], thousands[4], currency[13];
2453 else if (nLeading == -1)
2458 if (nGrouping == -2)
2463 numfmt.
Grouping = grouping[2] ==
'2' ? 32 : grouping[0] -
'0';
2465 else if (nGrouping == -1)
2472 else if (nParens == -1)
2522 if ((iMonth < 1) || (iMonth > 12))
2526 FIXME(
"Does not support dwFlags 0x%x, ignoring.\n",
dwFlags);
2535 ERR(
"GetLocaleInfo 0x%x failed.\n", localeValue);
2543 ERR(
"GetLocaleInfo of 0x%x failed in 2nd stage?!\n", localeValue);
2575 if (iWeekday < 1 || iWeekday > 7)
2577 if (iFirstDay < 0 || iFirstDay > 7)
2583 FIXME(
"Does not support dwFlags 0x%x, ignoring.\n",
dwFlags);
2586 if (iFirstDay == 0) {
2590 (
LPWSTR)&firstDay,
sizeof(firstDay) /
sizeof(
WCHAR));
2592 ERR(
"GetLocaleInfo 0x%x failed.\n", localeValue);
2595 iFirstDay = firstDay + 2;
2600 localeValue += (7 + iWeekday - 1 + iFirstDay - 2) % 7;
2605 ERR(
"GetLocaleInfo 0x%x failed.\n", localeValue);
2613 ERR(
"GetLocaleInfo 0x%x failed in 2nd stage?!\n", localeValue);
#define VARIANT_NOUSEROVERRIDE
#define memmove(s1, s2, n)
HRESULT WINAPI VarUdateFromDate(DATE dateIn, ULONG dwFlags, UDATE *lpUdate)
#define HRESULT_FROM_WIN32(x)
#define LOCALE_SABBREVMONTHNAME1
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
#define VAR_CALENDAR_HIJRI
GLdouble GLdouble GLdouble r
#define LOCALE_SABBREVDAYNAME1
#define LOCALE_USER_DEFAULT
GLuint GLuint GLsizei count
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG x1
_Check_return_ _CRTIMP int __cdecl _wcsnicmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
HRESULT WINAPI VariantCopyInd(VARIANT *pvargDest, VARIANTARG *pvargSrc)
DWORD WINAPI GetLastError(VOID)
HRESULT WINAPI VarParseNumFromStr(OLECHAR *lpszStr, LCID lcid, ULONG dwFlags, NUMPARSE *pNumprs, BYTE *rgbDig)
#define VAR_TIMEVALUEONLY
HRESULT WINAPI VarBstrFromDate(DATE dateIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
#define LOCALE_INEGNUMBER
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
#define LOCALE_SMONTHNAME1
BSTR WINAPI SysAllocString(LPCOLESTR str)
static const WCHAR szEmpty[]
#define VAR_FORMAT_NOSUBSTITUTE
#define DISP_E_TYPEMISMATCH
_Check_return_ _CRTIMP int __cdecl wcsncmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
#define LOCALE_SNEGATIVESIGN
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
#define LOCALE_SSHORTDATE
#define memcpy(s1, s2, n)
int _cdecl swprintf(const WCHAR *,...)
#define LOCALE_IFIRSTDAYOFWEEK
static const char * debugstr_variant(const VARIANT *var)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
#define VARIANT_CALENDAR_HIJRI
HRESULT WINAPI VarBstrFromBool(VARIANT_BOOL boolIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG _In_ LONG x2
BOOL get_date_format(LCID, DWORD, const SYSTEMTIME *, const WCHAR *, WCHAR *, int) DECLSPEC_HIDDEN
static unsigned char buff[32768]
HRESULT WINAPI VariantChangeTypeEx(VARIANTARG *pvargDest, VARIANTARG *pvargSrc, LCID lcid, USHORT wFlags, VARTYPE vt)