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
275static const WCHAR szGeneralDate[] = {
'G',
'e',
'n',
'e',
'r',
'a',
'l',
' ',
'D',
'a',
't',
'e',
'\0' };
283static const WCHAR szShortDate[] = {
'S',
'h',
'o',
'r',
't',
' ',
'D',
'a',
't',
'e',
'\0' };
291static const WCHAR szMediumDate[] = {
'M',
'e',
'd',
'i',
'u',
'm',
' ',
'D',
'a',
't',
'e',
'\0' };
307static const WCHAR szShortTime[] = {
'S',
'h',
'o',
'r',
't',
' ',
'T',
'i',
'm',
'e',
'\0' };
315static const WCHAR szMediumTime[] = {
'M',
'e',
'd',
'i',
'u',
'm',
' ',
'T',
'i',
'm',
'e',
'\0' };
332static const WCHAR szTrueFalse[] = {
'T',
'r',
'u',
'e',
'/',
'F',
'a',
'l',
's',
'e',
'\0' };
356static const WCHAR szGeneralNumber[] = {
'G',
'e',
'n',
'e',
'r',
'a',
'l',
' ',
'N',
'u',
'm',
'b',
'e',
'r',
'\0' };
402static 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;
597 fmt_state &= ~FMT_STATE_OPEN_COPY;
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]);
625 fmt_state &= ~FMT_STATE_OPEN_COPY;
641 while (*pFormat ==
'0')
649 num_header->
whole += *pOut;
650 TRACE(
"%d 0's\n", *pOut);
652 fmt_state &= ~FMT_STATE_OPEN_COPY;
664 while (*pFormat ==
'#')
672 num_header->
whole += *pOut;
673 TRACE(
"%d #'s\n", *pOut);
675 fmt_state &= ~FMT_STATE_OPEN_COPY;
688 fmt_state &= ~FMT_STATE_OPEN_COPY;
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')
729 fmt_state &= ~FMT_STATE_OPEN_COPY;
730 TRACE(
"thousands sep\n");
746 fmt_state &= ~FMT_STATE_OPEN_COPY;
759 fmt_state &= ~FMT_STATE_OPEN_COPY;
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)
863 fmt_state &= ~FMT_STATE_OPEN_COPY;
867 fmt_state &= ~FMT_STATE_SEEN_HOURS;
883 if (*pFormat ==
'h' || *pFormat ==
'H')
894 fmt_state &= ~FMT_STATE_OPEN_COPY;
908 while ((*pFormat ==
'm' || *pFormat ==
'M') &&
count < 4)
925 fmt_state &= ~FMT_STATE_OPEN_COPY;
937 if (*pFormat ==
'n' || *pFormat ==
'N')
948 fmt_state &= ~FMT_STATE_OPEN_COPY;
960 fmt_state &= ~FMT_STATE_OPEN_COPY;
972 if (*pFormat ==
's' || *pFormat ==
'S')
983 fmt_state &= ~FMT_STATE_OPEN_COPY;
985 else if ((*pFormat ==
't' || *pFormat ==
'T') &&
996 fmt_state &= ~FMT_STATE_OPEN_COPY;
1006 if (*pFormat ==
'w' || *pFormat ==
'W')
1011 *pOut++ = nFirstDay;
1012 *pOut++ = nFirstWeek;
1019 *pOut++ = nFirstDay;
1023 fmt_state &= ~FMT_STATE_OPEN_COPY;
1033 while ((*pFormat ==
'y' || *pFormat ==
'Y') &&
count < 4)
1045 fmt_state &= ~FMT_STATE_OPEN_COPY;
1062 while (*pFormat ==
'@')
1068 TRACE(
"%d @'s\n", *pOut);
1070 fmt_state &= ~FMT_STATE_OPEN_COPY;
1082 while (*pFormat ==
'&')
1088 TRACE(
"%d &'s\n", *pOut);
1090 fmt_state &= ~FMT_STATE_OPEN_COPY;
1099 if (*pFormat ==
'<')
1103 TRACE(
"to %s case\n", *pFormat ==
'<' ?
"lower" :
"upper");
1105 fmt_state &= ~FMT_STATE_OPEN_COPY;
1116 fmt_state &= ~FMT_STATE_OPEN_COPY;
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;
1363VARIANT_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;
1567VARIANT_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);
1904VARIANT_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;
2020VARIANT_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)
2077VarFormatFromTokens_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 WINE_DEFAULT_DEBUG_CHANNEL(t)
static const WCHAR szEmpty[]
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
HRESULT WINAPI VarBstrFromBool(VARIANT_BOOL boolIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
HRESULT WINAPI VarBstrFromDate(DATE dateIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
static unsigned char buff[32768]
GLuint GLuint GLsizei count
GLdouble GLdouble GLdouble r
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
#define memcpy(s1, s2, n)
#define memmove(s1, s2, n)
static const char * debugstr_variant(const VARIANT *var)
#define LOCALE_USER_DEFAULT
BSTR WINAPI SysAllocString(LPCOLESTR str)
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
#define VARIANT_CALENDAR_HIJRI
#define VAR_FORMAT_NOSUBSTITUTE
#define VARIANT_NOUSEROVERRIDE
#define VAR_CALENDAR_HIJRI
#define VAR_TIMEVALUEONLY
_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)
_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 VarUdateFromDate(DATE dateIn, ULONG dwFlags, UDATE *lpUdate)
HRESULT WINAPI VariantChangeTypeEx(VARIANTARG *pvargDest, VARIANTARG *pvargSrc, LCID lcid, USHORT wFlags, VARTYPE vt)
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
HRESULT WINAPI VarParseNumFromStr(OLECHAR *lpszStr, LCID lcid, ULONG dwFlags, NUMPARSE *pNumprs, BYTE *rgbDig)
HRESULT WINAPI VariantCopyInd(VARIANT *pvargDest, VARIANTARG *pvargSrc)
BOOL get_date_format(LCID, DWORD, const SYSTEMTIME *, const WCHAR *, WCHAR *, int) DECLSPEC_HIDDEN
DWORD WINAPI GetLastError(void)
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
#define HRESULT_FROM_WIN32(x)
#define DISP_E_TYPEMISMATCH
#define LOCALE_SSHORTDATE
#define LOCALE_SMONTHNAME1
#define LOCALE_SABBREVMONTHNAME1
#define LOCALE_SABBREVDAYNAME1
#define LOCALE_IFIRSTDAYOFWEEK
#define LOCALE_INEGNUMBER
#define LOCALE_SNEGATIVESIGN