45#define LCID_US MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT)
138#define FMT_TYPE_UNKNOWN 0x0
139#define FMT_TYPE_GENERAL 0x1
140#define FMT_TYPE_NUMBER 0x2
141#define FMT_TYPE_DATE 0x3
142#define FMT_TYPE_STRING 0x4
144#define FMT_TO_STRING 0x0
160#define FmtGetPositive(x) (x->starts[0])
161#define FmtGetNegative(x) (x->starts[1] ? x->starts[1] : x->starts[0])
162#define FmtGetZero(x) (x->starts[2] ? x->starts[2] : x->starts[0])
163#define FmtGetNull(x) (x->starts[3] ? x->starts[3] : x->starts[0])
169#define FMT_FLAG_LT 0x1
170#define FMT_FLAG_GT 0x2
171#define FMT_FLAG_RTL 0x4
186#define FMT_FLAG_PERCENT 0x1
187#define FMT_FLAG_EXPONENT 0x2
188#define FMT_FLAG_THOUSANDS 0x4
189#define FMT_FLAG_BOOL 0x20
215#define FMT_GEN_COPY 0x00
216#define FMT_GEN_INLINE 0x01
217#define FMT_GEN_END 0x02
218#define FMT_DATE_TIME_SEP 0x03
219#define FMT_DATE_DATE_SEP 0x04
220#define FMT_DATE_GENERAL 0x05
221#define FMT_DATE_QUARTER 0x06
222#define FMT_DATE_TIME_SYS 0x07
223#define FMT_DATE_DAY 0x08
224#define FMT_DATE_DAY_0 0x09
225#define FMT_DATE_DAY_SHORT 0x0A
226#define FMT_DATE_DAY_LONG 0x0B
227#define FMT_DATE_SHORT 0x0C
228#define FMT_DATE_LONG 0x0D
229#define FMT_DATE_MEDIUM 0x0E
230#define FMT_DATE_DAY_WEEK 0x0F
231#define FMT_DATE_WEEK_YEAR 0x10
232#define FMT_DATE_MON 0x11
233#define FMT_DATE_MON_0 0x12
234#define FMT_DATE_MON_SHORT 0x13
235#define FMT_DATE_MON_LONG 0x14
236#define FMT_DATE_YEAR_DOY 0x15
237#define FMT_DATE_YEAR_0 0x16
239#define FMT_DATE_YEAR_LONG 0x18
240#define FMT_DATE_MIN 0x1A
241#define FMT_DATE_MIN_0 0x1B
242#define FMT_DATE_SEC 0x1C
243#define FMT_DATE_SEC_0 0x1D
244#define FMT_DATE_HOUR 0x1E
245#define FMT_DATE_HOUR_0 0x1F
246#define FMT_DATE_HOUR_12 0x20
247#define FMT_DATE_HOUR_12_0 0x21
248#define FMT_DATE_TIME_UNK2 0x23
250#define FMT_DATE_AMPM_SYS1 0x2E
251#define FMT_DATE_AMPM_UPPER 0x2F
252#define FMT_DATE_A_UPPER 0x30
253#define FMT_DATE_AMPM_SYS2 0x31
254#define FMT_DATE_AMPM_LOWER 0x32
255#define FMT_DATE_A_LOWER 0x33
256#define FMT_NUM_COPY_ZERO 0x34
257#define FMT_NUM_COPY_SKIP 0x35
258#define FMT_NUM_DECIMAL 0x36
259#define FMT_NUM_EXP_POS_U 0x37
260#define FMT_NUM_EXP_NEG_U 0x38
261#define FMT_NUM_EXP_POS_L 0x39
262#define FMT_NUM_EXP_NEG_L 0x3A
263#define FMT_NUM_CURRENCY 0x3B
264#define FMT_NUM_TRUE_FALSE 0x3D
265#define FMT_NUM_YES_NO 0x3E
266#define FMT_NUM_ON_OFF 0x3F
267#define FMT_STR_COPY_SPACE 0x40
268#define FMT_STR_COPY_SKIP 0x41
435#define NEED_SPACE(x) if (cbTok < (int)(x)) return TYPE_E_BUFFERTOOSMALL; cbTok -= (x)
438#define COULD_BE(typ) ((!fmt_number && header->type==FMT_TYPE_UNKNOWN)||header->type==typ)
441#define FMT_STATE_OPEN_COPY 0x1
442#define FMT_STATE_WROTE_DECIMAL 0x2
443#define FMT_STATE_SEEN_HOURS 0x4
444#define FMT_STATE_WROTE_MINUTES 0x8
476 int cbTok,
int nFirstDay,
int nFirstWeek,
480 static const WCHAR szTTTTT[] = {
't',
't',
't',
't',
't' };
481 static const WCHAR szAMPM[] = {
'A',
'M',
'P',
'M' };
482 static const WCHAR szampm[] = {
'a',
'm',
'p',
'm' };
483 static const WCHAR szAMSlashPM[] = {
'A',
'M',
'/',
'P',
'M' };
484 static const WCHAR szamSlashpm[] = {
'a',
'm',
'/',
'p',
'm' };
485 const BYTE *namedFmt;
495 TRACE(
"%s, %p, %d, %d, %d, %#lx, %p.\n",
debugstr_w(lpszFormat), rgbTok, cbTok,
496 nFirstDay, nFirstWeek,
lcid, pcbActual);
499 nFirstDay < 0 || nFirstDay > 7 || nFirstWeek < 0 || nFirstWeek > 3)
502 if (!lpszFormat || !*lpszFormat)
520 memcpy(rgbTok, namedFmt, namedFmt[0]);
521 TRACE(
"Using pre-tokenised named format %s\n",
debugstr_w(lpszFormat));
541 while (*pFormat ==
';')
544 if (++fmt_number > 3)
550 TRACE(
"New header\n");
554 header->starts[fmt_number] = pOut - rgbTok;
563 else if (*pFormat ==
'\\')
571 *pOut++ = pFormat - lpszFormat;
577 fmt_state &= ~FMT_STATE_OPEN_COPY;
580 else if (*pFormat ==
'"')
588 else if (pFormat[1] ==
'"')
595 while (*pFormat && *pFormat !=
'"')
599 *pOut++ =
start - lpszFormat;
600 *pOut++ = pFormat -
start;
603 TRACE(
"Quoted string pos %d, len %d\n", pOut[-2], pOut[-1]);
605 fmt_state &= ~FMT_STATE_OPEN_COPY;
621 while (*pFormat ==
'0')
629 num_header->
whole += *pOut;
630 TRACE(
"%d 0's\n", *pOut);
632 fmt_state &= ~FMT_STATE_OPEN_COPY;
644 while (*pFormat ==
'#')
652 num_header->
whole += *pOut;
653 TRACE(
"%d #'s\n", *pOut);
655 fmt_state &= ~FMT_STATE_OPEN_COPY;
668 fmt_state &= ~FMT_STATE_OPEN_COPY;
670 TRACE(
"decimal sep\n");
672 else if ((*pFormat ==
'e' || *pFormat ==
'E') && (pFormat[1] ==
'-' ||
680 if (*pFormat ==
'e') {
681 if (pFormat[1] ==
'+')
686 if (pFormat[1] ==
'+')
693 while (*pFormat ==
'0')
709 fmt_state &= ~FMT_STATE_OPEN_COPY;
710 TRACE(
"thousands sep\n");
726 fmt_state &= ~FMT_STATE_OPEN_COPY;
739 fmt_state &= ~FMT_STATE_OPEN_COPY;
742 else if ((*pFormat ==
'a' || *pFormat ==
'A') &&
757 *pLastHours = *pLastHours + 2;
760 else if (*pFormat ==
'a' && pFormat[1] ==
'/' &&
761 (pFormat[2] ==
'p' || pFormat[2] ==
'P'))
772 *pLastHours = *pLastHours + 2;
775 else if (*pFormat ==
'A' && pFormat[1] ==
'/' &&
776 (pFormat[2] ==
'p' || pFormat[2] ==
'P'))
787 *pLastHours = *pLastHours + 2;
790 else if (*pFormat ==
'a' && !
wcsncmp(pFormat, szamSlashpm,
ARRAY_SIZE(szamSlashpm)))
801 *pLastHours = *pLastHours + 2;
804 else if (*pFormat ==
'A' && !
wcsncmp(pFormat, szAMSlashPM,
ARRAY_SIZE(szAMSlashPM)))
836 while ((*pFormat ==
'd' || *pFormat ==
'D') &&
count < 6)
843 fmt_state &= ~FMT_STATE_OPEN_COPY;
847 fmt_state &= ~FMT_STATE_SEEN_HOURS;
863 if (*pFormat ==
'h' || *pFormat ==
'H')
874 fmt_state &= ~FMT_STATE_OPEN_COPY;
888 while ((*pFormat ==
'm' || *pFormat ==
'M') &&
count < 4)
905 fmt_state &= ~FMT_STATE_OPEN_COPY;
917 if (*pFormat ==
'n' || *pFormat ==
'N')
928 fmt_state &= ~FMT_STATE_OPEN_COPY;
940 fmt_state &= ~FMT_STATE_OPEN_COPY;
952 if (*pFormat ==
's' || *pFormat ==
'S')
963 fmt_state &= ~FMT_STATE_OPEN_COPY;
965 else if ((*pFormat ==
't' || *pFormat ==
'T') &&
976 fmt_state &= ~FMT_STATE_OPEN_COPY;
986 if (*pFormat ==
'w' || *pFormat ==
'W')
992 *pOut++ = nFirstWeek;
1003 fmt_state &= ~FMT_STATE_OPEN_COPY;
1013 while ((*pFormat ==
'y' || *pFormat ==
'Y') &&
count < 4)
1025 fmt_state &= ~FMT_STATE_OPEN_COPY;
1042 while (*pFormat ==
'@')
1048 TRACE(
"%d @'s\n", *pOut);
1050 fmt_state &= ~FMT_STATE_OPEN_COPY;
1062 while (*pFormat ==
'&')
1068 TRACE(
"%d &'s\n", *pOut);
1070 fmt_state &= ~FMT_STATE_OPEN_COPY;
1079 if (*pFormat ==
'<')
1083 TRACE(
"to %s case\n", *pFormat ==
'<' ?
"lower" :
"upper");
1085 fmt_state &= ~FMT_STATE_OPEN_COPY;
1096 fmt_state &= ~FMT_STATE_OPEN_COPY;
1097 TRACE(
"copy right-to-left\n");
1117 pOut[-1] = pOut[-1] + 1;
1118 TRACE(
"extend copy (char '%c'), length now %d\n", *pFormat, pOut[-1]);
1123 TRACE(
"New copy (char '%c')\n", *pFormat);
1126 *pOut++ = pFormat - lpszFormat;
1136 header->size = pOut - rgbTok;
1138 *pcbActual =
header->size;
1144#define NUM_WROTE_DEC 0x01
1145#define NUM_WRITE_ON 0x02
1146#define NUM_WROTE_SIGN 0x04
1153 BYTE rgbDig[256], *prgbDig;
1155 int have_int, need_int = 0, have_frac, need_frac,
exponent = 0, pad = 0;
1157 WCHAR thousandSeparator[32];
1173 have_int = have_frac = 0;
1175 V_BOOL(&vBool) = VARIANT_FALSE;
1184 np.
cDig =
sizeof(rgbDig);
1198 V_BOOL(&vBool) = VARIANT_TRUE;
1200 else if (have_int == 1 && !
exponent && rgbDig[0] == 0)
1203 V_BOOL(&vBool) = VARIANT_FALSE;
1208 V_BOOL(&vBool) = VARIANT_TRUE;
1211 TRACE(
"num header: flags = 0x%x, mult=%d, div=%d, whole=%d, fract=%d\n",
1215 need_int = numHeader->
whole;
1219 !(have_int == 1 && !
exponent && rgbDig[0] == 0))
1226 pad = need_int - have_int;
1230 have_int = need_int;
1246 if(exponent < 0 && exponent > (-256 + have_int + have_frac))
1257 if (have_frac > need_frac)
1259 prgbDig = &rgbDig[have_int + need_frac];
1260 have_frac = need_frac;
1263 while (prgbDig-- > rgbDig && *prgbDig == 9)
1265 if (prgbDig < rgbDig)
1273 rgbDig[have_int + need_frac] = 0;
1284 while (have_frac > 0 && rgbDig[have_int + have_frac - 1] == 0)
1287 TRACE(
"have_int=%d,need_int=%d,have_frac=%d,need_frac=%d,pad=%d,exp=%d\n",
1288 have_int, need_int, have_frac, need_frac, pad,
exponent);
1295 thousandSeparator[0] =
',';
1296 thousandSeparator[1] = 0;
1305 WCHAR defaultChar =
'?';
1306 DWORD boolFlag, localeValue = 0;
1309 if (pToken - rgbTok >
header->size)
1311 ERR(
"Ran off the end of the format!\n");
1313 goto VARIANT_FormatNumber_Exit;
1320 memcpy(pBuff, lpszFormat + pToken[1], pToken[2] *
sizeof(
WCHAR));
1329 *pBuff++ = *pToken++;
1334 goto VARIANT_FormatNumber_Bool;
1338 goto VARIANT_FormatNumber_Bool;
1343VARIANT_FormatNumber_Bool:
1349 ERR(
"Boolean token not at end of format!\n");
1351 goto VARIANT_FormatNumber_Exit;
1368 TRACE(
"write negative sign\n");
1372 shouldAdvance =
FALSE;
1375 TRACE(
"write decimal separator\n");
1382 TRACE(
"write currency symbol\n");
1416 TRACE(
"write %d %sdigits or %s\n", pToken[1],
1429 count =
min(have_frac, pToken[1] + pad);
1430 for (
i = 0;
i > pad;
i--)
1436 pad += pToken[1] -
count;
1439 *pBuff++ =
'0' + *prgbDig++;
1442 for (; pad > 0; pad--)
1448 int count, count_max, position;
1452 TRACE(
"write negative sign\n");
1456 shouldAdvance =
FALSE;
1460 position = have_int + pad;
1462 position =
max(position, need_int);
1463 need_int -= pToken[1];
1464 count_max = have_int + pad - need_int;
1469 count = pToken[1] - count_max;
1475 position > 1 && (--position % 3) == 0)
1478 TRACE(
"write thousand separator\n");
1479 for (
k = 0; thousandSeparator[
k];
k++)
1480 *pBuff++ = thousandSeparator[
k];
1485 (have_int > 0 && *prgbDig > 0))
1490 TRACE(
"write %d whole number digits\n",
count);
1494 *pBuff++ =
'0' + *prgbDig++;
1496 position > 1 && (--position % 3) == 0)
1499 TRACE(
"write thousand separator\n");
1500 for (
k = 0; thousandSeparator[
k];
k++)
1501 *pBuff++ = thousandSeparator[
k];
1507 TRACE(
"write %d whole trailing 0's\n",
count);
1512 position > 1 && (--position % 3) == 0)
1515 TRACE(
"write thousand separator\n");
1516 for (
k = 0; thousandSeparator[
k];
k++)
1517 *pBuff++ = thousandSeparator[
k];
1525 ERR(
"Unknown token 0x%02x!\n", *pToken);
1527 goto VARIANT_FormatNumber_Exit;
1539 TRACE(
"added %d '%c'\n", defaultChar, defaultChar);
1540 *pBuff++ = defaultChar;
1547VARIANT_FormatNumber_Exit:
1626 DWORD dwVal = 0, localeValue = 0, dwFmt = 0;
1628 WCHAR defaultChar =
'?';
1630 if (pToken - rgbTok >
header->size)
1632 ERR(
"Ran off the end of the format!\n");
1634 goto VARIANT_FormatDate_Exit;
1641 memcpy(pBuff, lpszFormat + pToken[1], pToken[2] *
sizeof(
WCHAR));
1650 *pBuff++ = *pToken++;
1654 TRACE(
"time separator\n");
1660 TRACE(
"date separator\n");
1671 goto VARIANT_FormatDate_Exit;
1674 *pBuff++ = *pDate++;
1697 goto VARIANT_FormatDate_Exit;
1700 *pBuff++ = *pDate++;
1711 szPrintFmt =
L"%02d";
1717 TRACE(
"short day\n");
1724 TRACE(
"long day\n");
1740 FIXME(
"Medium date treated as long date\n");
1761 FIXME(
"Ignoring nFirstDay of %d, nFirstWeek of %d\n", pToken[0], pToken[1]);
1770 szPrintFmt =
L"%02d";
1776 TRACE(
"short month\n");
1783 TRACE(
"long month\n");
1794 szPrintFmt =
L"%02d";
1809 szPrintFmt =
L"%02d";
1819 szPrintFmt =
L"%02d";
1830 szPrintFmt =
L"%02d";
1840 szPrintFmt =
L"%02d";
1851 *pBuff++ = udate.
st.
wHour < 12 ?
'A' :
'P';
1856 *pBuff++ = udate.
st.
wHour < 12 ?
'A' :
'P';
1860 *pBuff++ = udate.
st.
wHour < 12 ?
'a' :
'p';
1865 *pBuff++ = udate.
st.
wHour < 12 ?
'a' :
'p';
1869 ERR(
"Unknown token 0x%02x!\n", *pToken);
1871 goto VARIANT_FormatDate_Exit;
1884 TRACE(
"added %d %c\n", defaultChar, defaultChar);
1885 *pBuff++ = defaultChar;
1896 goto VARIANT_FormatDate_Exit;
1901 else if (szPrintFmt)
1910VARIANT_FormatDate_Exit:
1954 if (
V_BSTR(&vStr)[0] ==
'\0')
1969 if (pToken - rgbTok >
header->size)
1971 ERR(
"Ran off the end of the format!\n");
1973 goto VARIANT_FormatString_Exit;
1980 memcpy(pBuff, lpszFormat + pToken[1], pToken[2] *
sizeof(
WCHAR));
1987 dwCount = pToken[1];
1990 TRACE(
"insert %d initial spaces\n", blanks_first);
1991 while (dwCount > 0 && blanks_first > 0)
1998 TRACE(
"copy %d chars%s\n", dwCount,
2000 while (dwCount > 0 && *pSrc)
2011 TRACE(
"insert %d spaces\n", dwCount);
2012 while (dwCount-- > 0)
2019 ERR(
"Unknown token 0x%02x!\n", *pToken);
2021 goto VARIANT_FormatString_Exit;
2026VARIANT_FormatString_Exit:
2048#define NUMBER_VTBITS (VTBIT_I1|VTBIT_UI1|VTBIT_I2|VTBIT_UI2| \
2049 VTBIT_I4|VTBIT_UI4|VTBIT_I8|VTBIT_UI8| \
2050 VTBIT_R4|VTBIT_R8|VTBIT_CY|VTBIT_DECIMAL| \
2051 VTBIT_BOOL|VTBIT_INT|VTBIT_UINT)
2064 TRACE(
"%p, %s, %p, %#lx, %p, %#lx.\n", pVarIn,
debugstr_w(lpszFormat),
2072 if (!pVarIn || !rgbTok)
2083VarFormatFromTokens_AsStr:
2086 *pbstrOut =
V_BSTR(&vTmp);
2106 ERR(
"unrecognised format type 0x%02x\n",
header->type);
2114 goto VarFormatFromTokens_AsStr;
2152 nFirstDay, nFirstWeek,
dwFlags, pbstrOut);
2203 if (!pVarIn || !pbstrOut || nFormat < 0 || nFormat > 4)
2218#define GETLOCALENUMBER(type,field) GetLocaleInfoW(LOCALE_USER_DEFAULT, \
2219 type|LOCALE_RETURN_NUMBER, \
2220 (LPWSTR)&numfmt.field, \
2221 sizeof(numfmt.field)/sizeof(WCHAR))
2253 TRACE(
"%s, %d, %d, %d, %d, %#lx, %p.\n",
debugstr_variant(pVarIn), nDigits, nLeading,
2254 nParens, nGrouping,
dwFlags, pbstrOut);
2256 if (!pVarIn || !pbstrOut || nDigits > 9)
2269 WCHAR buff[256], decimal[8], thousands[8];
2283 else if (nLeading == -1)
2288 if (nGrouping == -2)
2293 numfmt.
Grouping = grouping[2] ==
'2' ? 32 : grouping[0] -
'0';
2295 else if (nGrouping == -1)
2302 else if (nParens == -1)
2358 TRACE(
"%s, %d, %d, %d, %d, %#lx, %p.\n",
debugstr_variant(pVarIn), nDigits, nLeading,
2359 nParens, nGrouping,
dwFlags, pbstrOut);
2361 if (!pVarIn || !pbstrOut || nDigits > 9)
2378 V_R8(&vDbl) *= 100.0;
2380 nGrouping,
dwFlags, pbstrOut);
2385 BOOL bBracket = (*pbstrOut)[dwLen] ==
')';
2432 TRACE(
"%s, %d, %d, %d, %d, %#lx, %p.\n",
debugstr_variant(pVarIn), nDigits, nLeading,
2433 nParens, nGrouping,
dwFlags, pbstrOut);
2435 if (!pVarIn || !pbstrOut || nDigits > 9)
2443 if (
FAILED(hRet))
return hRet;
2458 WCHAR buff[256], decimal[8], thousands[4], currency[13];
2468 else if (nLeading == -1)
2473 if (nGrouping == -2)
2478 numfmt.
Grouping = grouping[2] ==
'2' ? 32 : grouping[0] -
'0';
2480 else if (nGrouping == -1)
2487 else if (nParens == -1)
2537 if ((iMonth < 1) || (iMonth > 12))
2541 FIXME(
"Does not support flags %#lx, ignoring.\n",
dwFlags);
2550 ERR(
"GetLocaleInfo %#lx failed.\n", localeValue);
2558 ERR(
"GetLocaleInfo of %#lx failed in 2nd stage?!\n", localeValue);
2590 if (iWeekday < 1 || iWeekday > 7)
2592 if (iFirstDay < 0 || iFirstDay > 7)
2598 FIXME(
"Does not support flags %#lx, ignoring.\n",
dwFlags);
2601 if (iFirstDay == 0) {
2605 (
LPWSTR)&firstDay,
sizeof(firstDay) /
sizeof(
WCHAR));
2607 ERR(
"GetLocaleInfo %#lx failed.\n", localeValue);
2610 iFirstDay = firstDay + 2;
2615 localeValue += (7 + iWeekday - 1 + iFirstDay - 2) % 7;
2620 ERR(
"GetLocaleInfo %#lx failed.\n", localeValue);
2628 ERR(
"GetLocaleInfo %#lx 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)
static int get_date_format(const NLS_LOCALE_DATA *locale, DWORD flags, const SYSTEMTIME *systime, const WCHAR *format, WCHAR *buffer, int len)
_ACRTIMP double __cdecl wcstod(const wchar_t *, wchar_t **)
_ACRTIMP int __cdecl wcsncmp(const wchar_t *, const wchar_t *, size_t)
HRESULT WINAPI VarBstrFromBool(VARIANT_BOOL boolIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
HRESULT WINAPI VarBstrFromDate(DATE dateIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
HRESULT WINAPI VarDateFromR8(double dblIn, DATE *pdateOut)
HRESULT WINAPI VarCyFromStr(const OLECHAR *strIn, LCID lcid, ULONG dwFlags, CY *pCyOut)
static const char * debugstr_variant(const VARIANT *var)
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)
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
#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
_Out_opt_ int _Out_opt_ int * cy
static const char *static const char const char DWORD void DWORD *static const char const char DWORD void DWORD *static const char DWORD DWORD void * buff
HRESULT WINAPI VarParseNumFromStr(const OLECHAR *lpszStr, LCID lcid, ULONG dwFlags, NUMPARSE *pNumprs, BYTE *rgbDig)
HRESULT WINAPI VarUdateFromDate(DATE dateIn, ULONG dwFlags, UDATE *lpUdate)
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
HRESULT WINAPI VariantChangeTypeEx(VARIANTARG *pvargDest, const VARIANTARG *pvargSrc, LCID lcid, USHORT wFlags, VARTYPE vt)
HRESULT WINAPI VariantCopyInd(VARIANT *pvargDest, const VARIANTARG *pvargSrc)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
DWORD WINAPI GetLastError(void)
static HRESULT HRESULT_FROM_WIN32(unsigned int 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